ABSTRACT:
Animal movements are often defined using the home range concept. Consequently, home ranges are determined by temporal, spatial, and individual-level processes. Within the environment, one of the key factors influencing an animal’s range and how it uses the environment is that of resources. Alterations to the environment that affect resource distribution and availability can have profound consequences on an animal’s spatial patterns. One of the best examples of this is that of golf courses. Some environmental modifications exhibited by some human altered environment can have positive effects on certain wildlife species by altering their movement patterns and foraging efforts. We analyzed data collected from 22 Gila Monsters Heloderma suspectum at a subsidized environment in Arizona from 2007 to 2013 and a non-subsidized environment. We performed both kernel density estimation and minimum convex polygons for comparability purposes. After adjusting for sex, number of fixes, and year, males in the subsidized environment had an average area of 15.9 ha while the females had an area of 5.9 ha. In the un-subsidized environment males had an average range of 38.8 ha while females had an area of 29.8 ha. This suggests that the home ranges may be smaller in subsidized environments than those of un-subsidized environments due to increases in available resources. There were also differences in home range overlap within and between sexes. In the subsidized population, there was very little male-male overlap with only two occurances, more female-female overlap and male-female overlap was increased. Male home ranges often overlapped several female home ranges. Gila Monsters may not have to invest in wide ranging foraging efforts as those populations of the un-subsidized environments.
Overview of the spatial ecology of Gila Monsters (Heloderma suspectum) at Stone Canyon Golf Club as a resource subsidized population vs. Owl Head Buttes representing the unsubsized natural population. Compared home range sizes of Heloderma suspectum between two populations. One represented a subsidized population at Stone Canyon Golf Club and the other at Owl Head Buttes representing the unsubsidized population. Stone Canyon is located in Oro Valley on the north end of Tucson, Arizona. Owl Head Buttes is located about 17 km straight line distance north west from Stone Canyon. Data at Owl Head was collected from 2000 - 2002, while fixes were collected from 2007 - 2013 at Stone Canyon. We Calculated minimum convex polygons using both 95 percent and 100 percent of the locations for each lizard, as well as 95% and 50% Kernel Density Estimations (KDE).

Figure 1 | Stone Canyon Golf Club, located in Oro Valley, Arizona on the northern edge of Tucson.


Overall Yearly Home Ranges (MCP)
Summary of home range size.
Table 1 | Pooled overall home ranges of Gila Monsters at Owl Head Buttes and Stone Canyon Golf Club. Both 100% and 95% MCPs were calculated between both populations.
Table: Home range sizes of Stone Canyon and Owl head Buttes using both 95 percent and 100 percent MCPs.
Year Gila Sex Environment Home_Range_100mcp N100 Home_Range_95mcp N95
----- ----- ------- -------------- ------------------ ----- ----------------- ----
2000 1 female nonsubsidized 25.20 42 23.00 38
_ 2 male nonsubsidized 28.70 125 24.50 112
_ 3 male nonsubsidized 82.70 89 68.40 78
_ 4 male nonsubsidized 55.60 80 40.50 73
2001 1 female nonsubsidized 20.10 26 NA NA
_ 2 male nonsubsidized 23.50 10 NA NA
_ 3 male nonsubsidized 60.10 18 NA NA
_ 4 male nonsubsidized 24.40 21 NA NA
_ 10 male nonsubsidized 28.50 14 NA NA
_ 11 male nonsubsidized 10.60 22 NA NA
_ 12 male nonsubsidized 23.60 7 NA NA
_ 13 female nonsubsidized 8.90 9 NA NA
_ 15 female nonsubsidized 13.00 11 NA NA
_ 50 female nonsubsidized 21.00 11 NA NA
_ 51 female nonsubsidized 7.10 8 NA NA
2002 2 male nonsubsidized 66.20 38 40.00 37
_ 4 male nonsubsidized 73.10 76 55.50 73
_ 10 male nonsubsidized 39.50 111 33.30 105
_ 11 male nonsubsidized 39.30 92 31.90 88
_ 12 male nonsubsidized 49.50 66 41.50 63
_ 13 female nonsubsidized 26.30 101 23.70 96
_ 15 female nonsubsidized 39.20 98 21.30 94
_ 17 female nonsubsidized 47.60 106 29.10 101
_ 50 female nonsubsidized 15.80 68 14.10 66
_ 51 female nonsubsidized 18.50 57 12.40 57
2007 F104 female subsidized 3.37 18 3.37 19
_ F114 female subsidized 2.51 8 0.58 7
_ F36 female subsidized 5.05 20 3.49 19
_ F66 female subsidized 10.23 22 5.56 20
_ M112 male subsidized 12.51 13 12.51 12
_ M14 male subsidized 4.66 15 3.87 14
2008 F104 female subsidized 4.97 53 3.47 50
_ F114 female subsidized 11.96 52 9.38 49
_ F135 female subsidized 4.07 16 1.58 15
_ F137 female subsidized 5.98 15 5.75 14
_ F36 female subsidized 9.73 54 7.55 51
_ F66 female subsidized 11.29 51 9.95 48
_ M119 male subsidized 25.01 58 20.23 55
2009 F104 female subsidized 7.45 64 7.25 62
_ F114 female subsidized 11.46 52 8.28 49
_ F135 female subsidized 6.21 62 5.47 58
_ F137 female subsidized 6.09 35 5.68 33
_ F147 female subsidized 17.90 50 14.04 48
_ F36 female subsidized 7.48 62 5.83 60
_ F66 female subsidized 12.20 67 11.01 66
_ M112 female subsidized 7.89 71 1.73 70
_ M119 male subsidized 22.62 18 16.37 16
_ M69 male subsidized 1.91 69 1.91 69
_ F146 male subsidized 10.01 20 8.49 17
2010 F114 female subsidized 9.65 44 8.30 41
_ F137 female subsidized 6.32 45 5.26 42
_ F147 female subsidized 16.65 36 14.75 34
_ F200 female subsidized 5.36 34 5.23 33
_ F214 female subsidized 7.38 27 3.01 25
_ F36 female subsidized 38.81 50 12.16 47
_ F66 female subsidized 28.96 52 16.22 49
_ M112 male subsidized 20.46 26 14.41 24
_ M119 male subsidized 17.46 31 9.70 29
_ M69 male subsidized 13.85 30 10.75 28
2011 F114 female subsidized 5.91 22 3.30 20
_ F137 female subsidized 4.80 33 4.28 31
_ F147 female subsidized 19.44 24 12.90 22
_ F200 female subsidized 8.35 28 7.66 27
_ F214 female subsidized 6.61 22 5.66 21
_ F252 female subsidized 3.09 17 1.60 16
_ F36 female subsidized 11.93 23 10.95 21
_ F66 female subsidized 5.72 5 0.66 4
_ M14 male subsidized 4.48 13 3.84 12
_ M215 male subsidized 11.47 16 11.47 15
_ M255 male subsidized 5.85 16 5.59 15
2012 F114 female subsidized 10.17 54 7.15 51
_ F137 female subsidized 2.06 13 1.36 12
_ F147 female subsidized 17.64 52 16.75 49
_ F252 female subsidized 5.19 53 3.63 50
_ F36 female subsidized 10.34 52 10.30 49
_ M14 male subsidized 4.42 13 3.77 12
_ M215 male subsidized 11.04 21 9.85 20
_ M255 male subsidized 8.21 13 5.39 12
2013 F114 female subsidized 1.16 7 0.28 6
_ F147 female subsidized 0.31 6 0.00 5
_ F252 female subsidized NA 4 NA NA
_ F36 female subsidized 0.13 6 0.00 5
Gila Monster Home Range Sizes at Stone Canyon vs. Owl Head Buttes.

Table 2 | Group 100% MCP home range means of raw data of Stone Canyon and Owl Head Buttes. Grouped by environment and sex.
Table: Group Means of Overall 100% MCP Home Ranges
Environment Sex N Home_Range_100mcp sd se ci
-------------- ------- --- ------------------ ---------- --------- ----------
nonsubsidized female 11 22.063636 12.287414 3.704795 8.254797
nonsubsidized male 14 43.235714 21.672372 5.792185 12.513255
subsidized female 37 9.836757 6.984007 1.148164 2.328584
subsidized male 17 11.825294 6.706133 1.626476 3.447976
Table 3 | Group 95% MCP home range means of raw data of Stone Canyon and Owl Head Buttes. Grouped by environment and sex.
Table: Group Means of Overall 95% MCP Home
Ranges
Environment Sex N Home_Range_95mcp sd se ci
-------------- ------- --- ----------------- ---------- ---------- ----------
nonsubsidized female 6 20.600000 6.286493 2.5664502 6.597270
nonsubsidized male 8 41.950000 13.987954 4.9454886 11.694222
subsidized female 37 7.132432 4.339651 0.7134342 1.446912
subsidized male 17 9.037059 4.934157 1.1967090 2.536910

Gila Monster Yearly Home Range Shifts of 100% MCPs.

Repeated measures ANOVA for Yearly Home Ranges.
Repeated Measure ANOVA for 100% MCP overall home ranges
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Home_Range_100mcp ~ Environment + Year + Sex + N100 + Environment *
Sex + (1 | Gila)
Data: year
REML criterion at convergence: 573.4
Scaled residuals:
Min 1Q Median 3Q Max
-2.75980 -0.39242 -0.05151 0.28203 3.07570
Random effects:
Groups Name Variance Std.Dev.
Gila (Intercept) 29.62 5.443
Residual 82.78 9.098
Number of obs: 79, groups: Gila, 30
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) -1.072e+03 1.679e+03 7.165e+01 -0.638 0.525333
Environmentsubsidized -1.542e+01 8.207e+00 6.638e+01 -1.880 0.064559 .
Year 5.419e-01 8.389e-01 7.165e+01 0.646 0.520346
Sexmale 1.967e+01 4.862e+00 2.518e+01 4.046 0.000435 ***
N100 1.917e-01 4.144e-02 5.484e+01 4.625 2.33e-05 ***
Environmentsubsidized:Sexmale -1.484e+01 6.081e+00 2.719e+01 -2.441 0.021450 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) Envrnm Year Sexmal N100
Envrnmntsbs 0.855
Year -1.000 -0.856
Sexmale -0.043 0.278 0.041
N100 0.060 0.121 -0.062 -0.041
Envrnmnts:S 0.012 -0.332 -0.011 -0.801 0.101
ANOVA Table: 100% MCP
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Environment 719.49 719.49 1 71.576 8.6920 0.0043136 **
Year 34.54 34.54 1 71.651 0.4173 0.5203462
Sex 1351.82 1351.82 1 26.188 16.3309 0.0004154 ***
N100 1770.69 1770.69 1 54.843 21.3913 2.325e-05 ***
Environment:Sex 493.10 493.10 1 27.186 5.9570 0.0214502 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Repeated Measure ANOVA for 95% MCP overall home ranges
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Home_Range_95mcp ~ Environment + Year + Sex + N100 + Environment *
Sex + (1 | Gila)
Data: year
REML criterion at convergence: 416.1
Scaled residuals:
Min 1Q Median 3Q Max
-2.5866 -0.3142 -0.0239 0.2939 2.1056
Random effects:
Groups Name Variance Std.Dev.
Gila (Intercept) 42.58 6.525
Residual 14.24 3.774
Number of obs: 68, groups: Gila, 30
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) -868.75075 808.91445 39.02219 -1.074 0.289432
Environmentsubsidized -17.87976 5.09289 57.98897 -3.511 0.000872 ***
Year 0.44337 0.40411 39.02461 1.097 0.279296
Sexmale 21.82943 4.31027 25.65769 5.065 2.94e-05 ***
N100 0.02367 0.03032 40.40428 0.781 0.439569
Environmentsubsidized:Sexmale -16.25133 4.97477 32.87969 -3.267 0.002548 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) Envrnm Year Sexmal N100
Envrnmntsbs 0.643
Year -1.000 -0.647
Sexmale -0.035 0.396 0.033
N100 -0.006 0.276 0.003 -0.051
Envrnmnts:S -0.002 -0.460 0.004 -0.865 0.044
ANOVA Table: 95% MCP
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Environment 470.59 470.59 1 61.980 33.0376 2.96e-07 ***
Year 17.15 17.15 1 39.025 1.2038 0.279296
Sex 430.74 430.74 1 32.267 30.2402 4.53e-06 ***
N100 8.68 8.68 1 40.404 0.6094 0.439569
Environment:Sex 152.01 152.01 1 32.880 10.6717 0.002548 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Table 4. Directional means of home range after being adjusted for year, sex and sample size.
Table: Adjusted Group Means of Overall Home Ranges
Environment Sex lsmean SE df lower.CL upper.CL
-------------- ------- ---------- --------- --------- ---------- ---------
nonsubsidized female 23.739759 6.015077 66.85165 11.733125 35.74639
subsidized female 8.314934 3.281775 46.24553 1.710009 14.91986
nonsubsidized male 43.412310 6.061028 66.27236 31.312006 55.51261
subsidized male 13.146356 3.754579 53.70952 5.617946 20.67477
Post-Hoc comparisons between sexes and environment:
$emmeans
Environment = nonsubsidized:
Sex emmean SE df lower.CL upper.CL
female 23.74 6.02 66.8 11.73 35.7
male 43.41 6.06 66.3 31.31 55.5
Environment = subsidized:
Sex emmean SE df lower.CL upper.CL
female 8.31 3.28 46.2 1.71 14.9
male 13.15 3.75 53.7 5.62 20.7
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Environment = nonsubsidized:
contrast estimate SE df t.ratio p.value
female - male -19.67 4.87 31.6 -4.041 0.0003
Environment = subsidized:
contrast estimate SE df t.ratio p.value
female - male -4.83 3.71 36.4 -1.301 0.2014
Graphical Comparisons of Sex Within Each Environment:

Figure 6 | Pairwise comparisons of home range between sexes within each environment. If red arrows overlap those of others, then there is no significant statistical difference.
$emmeans
Sex = female:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 23.74 6.02 66.8 11.73 35.7
subsidized 8.31 3.28 46.2 1.71 14.9
Sex = male:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 43.41 6.06 66.3 31.31 55.5
subsidized 13.15 3.75 53.7 5.62 20.7
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Sex = female:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized 15.4 8.36 68.3 1.845 0.0694
Sex = male:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized 30.3 8.60 69.4 3.517 0.0008
Graphical Comparisons of Sex between the two populations:

Figure 7 | Paiwise comparisons of sex between environments. If red arrows overlap those of others, then there is no significant statistical difference.
At Stone Canyon, mean male Gila Monster home range was 11.8 ± 1.6 S.E. ha (100% MCP), 9.0 ± 1.1 S.E. Ha (95% MCP), with a mean female home range at 9.8 ± 1.1 S.E. ha (100% MCP), 7.1 ± 0.7 S.E. ha (95% MCP). Mean home ranges of male and females at Owl Head Buttes were 43.2 ± S.E. 5.7 ha (100% MCP), 41.9 ± 4.9 S.E. ha (95% MCP), and 22.0 ± 3.7 S.E. ha (100% MCP), 20.6 ± 2.5 S.E. ha (95% MCP) respectively. In the pooled data of both populations, there was no effect of year on the analyses (F = 0.41, P = 0.52), while a significant difference between the two populations was detected (F = 8.69, P = 0.004), and a significance in sex (F = 16.33, P = 0.0004). Using the 95% MCPs, revealed similar results. Post-Hoc analyses between sexes indicated that there was a significant difference in male home ranges between the two environments (df = 68.3, P = 0.0008). However, the difference in female home ranges between the two environments was not significant (df = 68.3, P = 0.06). At stone canyon there was no significant difference between male and female home ranges (df = 36.4, P = 0.20) with male home ranges being only 3% larger than females, while males at Owl Head Buttes had significantly larger home ranges than did females (df = 31.6, P = 0.0003) with males having 65% larger home ranges than females. Interestingly, males at Stone Canyon had smaller home ranges than did the females at Owl Head Buttes (Tables 2-3), suggesting that Gila Monster home ranges in a resource subsidized population is greatly influenced by environmental factors of both populations. When using 95% MCPs, male home ranging reduced by 25% and female range by 31%. At Owl Head Buttes, Gila Monsters showed a similar behavior with male home ranges reduced by 20% and female ranges reduced by 26% using 95% MCPs.
Overall Yearly Home Ranges (KDE)
Home range estimation on the Stone Canyon data using 95% KDEs with href bandwidth produced a male home range at 33.9 ± 3.27 S.E. ha, and a female home range at 23.06 ± 1.86 S.E. KDE estimates for male and female home ranges were 96% and 80% larger than MCP estimates. Repeated Measures analysis of KDEs suggested that there was a small significant difference between male and female home ranges at Stone Canyon (F = 4.52, P = 0.04).
Table: Yearly KDE Home Ranges
Year Gila Sex Environment Home_Range_95kde N Home_Range_50kde N50
----- ----- ------- ------------ ----------------- --- ----------------- ----
2007 F104 female subsidized 13.84 18 3.69 15
NA F36 female subsidized 16.51 20 4.26 16
NA F66 female subsidized 32.31 22 7.86 17
NA M67 male subsidized NA 16 8.97 12
NA M112 male subsidized NA 13 15.42 11
NA M14 male subsidized 14.52 15 3.76 12
NA M67 male subsidized 35.47 14 8.97 10
2008 F104 female subsidized 13.22 53 2.61 42
NA F114 female subsidized 20.55 52 3.68 38
NA F135 female subsidized 11.36 16 2.19 12
NA F137 female subsidized 20.51 15 5.61 14
NA F36 female subsidized 18.89 54 4.98 41
NA F66 female subsidized 39.30 50 9.97 43
NA M119 male subsidized 47.65 58 12.18 43
2009 F104 female subsidized 19.11 64 4.63 14
NA F114 female subsidized 20.34 52 4.08 43
NA F135 female subsidized 14.43 62 4.43 50
NA F137 female subsidized 16.94 35 4.99 32
NA F147 female subsidized 39.67 62 9.06 52
NA F36 female subsidized 13.96 67 3.20 52
NA F66 female subsidized 25.90 71 6.35 69
NA M112 female subsidized NA 18 14.27 17
NA M119 male subsidized 49.53 69 12.55 61
NA M69 male subsidized NA NA NA NA
NA F146 male subsidized 20.17 43 3.97 31
2010 F114 female subsidized 21.06 44 6.08 35
NA F137 female subsidized 13.24 45 3.33 13
NA F147 female subsidized 34.73 36 7.13 28
NA F200 female subsidized 20.37 34 4.09 25
NA F214 female subsidized 14.97 27 3.56 24
NA F36 female subsidized 47.49 50 9.73 37
NA F66 female subsidized 47.77 52 7.26 33
NA M112 male subsidized 55.25 26 8.60 21
NA M119 male subsidized 33.88 31 7.14 22
NA M69 male subsidized 37.45 30 10.49 22
NA F146 female subsidized 33.84 9 8.39 7
2011 F114 female subsidized 13.82 22 2.66 17
NA F137 female subsidized 12.12 33 2.65 25
NA F147 female subsidized 43.80 24 9.66 17
NA F200 female subsidized 23.96 28 6.86 26
NA F214 female subsidized 23.39 22 5.91 18
NA F252 female subsidized 8.55 17 1.94 14
NA F36 female subsidized 34.90 23 8.81 20
NA M14 male subsidized 20.36 12 5.27 10
NA M215 male subsidized 46.26 16 11.74 15
NA M255 male subsidized 30.10 16 8.25 15
2012 F114 female subsidized 21.04 54 5.41 45
NA F137 female subsidized 7.87 13 1.24 10
NA F147 female subsidized 32.98 52 7.74 36
NA F252 female subsidized 10.09 53 1.83 39
NA F36 female subsidized 27.59 52 7.67 39
NA M14 male subsidized 24.02 13 6.49 10
NA M215 male subsidized 28.52 21 7.31 15
NA M255 male subsidized 32.03 13 8.27 11
Table | Raw Group 95% KDE home range means of Stone Canyon and Owl Head Buttes. Grouped by environment and sex.
Table: Raw Group Means of Overall 95% KDE Home
Ranges
Sex N Home_Range_95kde sd se ci
------- --- ----------------- --------- --------- ---------
female 36 23.06722 11.19254 1.865424 3.787012
male 14 33.94357 12.24405 3.272359 7.069503

Figure | Raw 95% KDE home ranges between male and femal home ranges at Stone Canyon.
Repeated measures ANOVA for KDE Home Ranges.
Repeated Measure ANOVA for 95% KDE overall home ranges
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Home_Range_95kde ~ Year + Sex + N + (1 | Gila)
Data: sub
REML criterion at convergence: 364.2
Scaled residuals:
Min 1Q Median 3Q Max
-1.53251 -0.55223 -0.05156 0.30402 2.59672
Random effects:
Groups Name Variance Std.Dev.
Gila (Intercept) 76.00 8.718
Residual 64.47 8.030
Number of obs: 50, groups: Gila, 18
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) -1.430e+03 1.764e+03 3.974e+01 -0.810 0.4225
Year 7.226e-01 8.778e-01 3.975e+01 0.823 0.4153
Sexmale 9.973e+00 4.689e+00 2.329e+01 2.127 0.0442 *
N 2.051e-02 7.616e-02 3.718e+01 0.269 0.7892
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) Year Sexmal
Year -1.000
Sexmale -0.002 0.000
N 0.004 -0.005 0.101
ANOVA Table for 95% KDE (subsidized)
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Year 43.696 43.696 1 39.749 0.6777 0.41528
Sex 291.640 291.640 1 23.292 4.5234 0.04424 *
N 4.673 4.673 1 37.176 0.0725 0.78924
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Table | Directional means of KDE home ranges after being adjusted for year, sex and sample size.
Table: Adjusted KDE Group Means of Overall Home Ranges
Sex lsmean SE df lower.CL upper.CL
------- --------- --------- --------- --------- ---------
female 23.37885 3.014774 15.29042 16.96363 29.79408
male 33.35191 3.866392 23.85930 25.36958 41.33424
Seasonal Home Range
Seasonal Home Range.
Home range analysis broken down by five seasons; Emergence, Dry, Monsoon, Post Monsoon. The start of emergence was defined by when movement patterns increased from none/minimal to the start of high activity. Effort was taken to match as closely as possible to the Owl Head Buttes emergence date interval. Monsoon season was adjusted using NOAA climate data. The start of was defined when the mean dew point temperatures of three consecutive days were greater than 55 degrees.
Scaling home range analyses by seasonal estimates reduces the number or locations for each lizard. 100% MCPs were used for seasonal home range analyses to avoid any further reduction of locations for each estimation.

Analysis indicated that there was no effect of sex on seasonal home ranges (df = 1, F = 2.42, P = 0.12), but there was an effect of season (df = 3, F = 15.41, P = <0.001) and an interaction of environment and season (df = 3, F = 6.84, P = <0.001). Seasonal home ranges at Stone Canyon varied in size between seasons but did not seem shift (Fig.x), with seasonal home ranges overlapping each other, only extending or collapsing between seasons. Post-Hoc analyses with home range means averaged across sex of the Stone Canyon population, suggested that there was no significant difference in home ranges between the emergence (4.32 ± 2.55 S.E. ha) and post-monsoon seasons (5.09 ± 2.07 S.E. ha) nor dry and monsoon (12.23 ± 1.74 S.E. ha and 9.04 ± 1.78 S.E. ha). There was also no significance between emergence and dry/monsoon seasons, but there was a difference between dry and post-monsoon (df = 80.2, P = 0.04). Gila monsters at our subsidized environment seemed to have home ranges that stayed rather small without major differences between sexes throughout the year with the exception of the dry season. During the dry season is where we see a significant increase in home range sizes between the sexes (Table x, Figure x). Post-Hoc analyses on the Owl Head Buttes population indicated that there was no significant difference between emergence (3.33 ± 2.24 S.E. ha) and post-monsoon (2.36 ± 2.36 S.E.) nor dry and monsoon (18.86 ± 2.25 S.E. ha and 21.85 ± 2.03 S.E. ha) reflecting that of Stone Canyon. However, there was a significant difference between emergence and dry/monsoon (df = 69.4, P = <0.0001, and df = 68, P = <0.0001 respectively), as well as post-monsoon and dry/monsoon (df = 78.9, P = <0.0001, and df = 74, P = <0.0001). This shows a rather different pattern than seen at Stone Canyon. Gila Monster home ranges at Owl Head seem to have larger home range patterns during both the dry and monsoon seasons, with the largest increase in home range area taking place during the monsoon season (Table x; Figure x). Pairwise analyses between the two populations indicated no difference between emergence (df = 87.7, P = 0.76) or post-monsoon (df = 89.4, P = 0.35). Differences in home range sizes between the two populations were between the dry and monsoon seasons (Fig.x). Owl Head home ranges were 58% larger than those at Stone Canyon during the dry season, and 76% larger during the monsoon season.
Table 5 | Group means of seasonal home ranges between Stone Canyon (subsidized) and Owl Head Buttes (non-subsidized). These means are averaged across sex.
Table: Raw Group Means of Seasonal Home Ranges
Environment Season N Home_Range_100mcp sd se ci
-------------- ------------- --- ------------------ ---------- ---------- ---------
nonsubsidized Dry 12 23.7166667 12.841682 3.7070742 8.159215
nonsubsidized Emergence 10 2.8100000 3.121414 0.9870776 2.232925
nonsubsidized Monsoon 13 23.6538462 9.446482 2.6199828 5.708452
nonsubsidized Post_Monsoon 11 0.6909091 1.013365 0.3055411 0.680788
subsidized Dry 17 13.0364706 10.574940 2.5647997 5.437133
subsidized Emergence 9 2.0977778 1.649566 0.5498555 1.267969
subsidized Monsoon 18 10.5600000 7.518662 1.7721657 3.738943
subsidized Post_Monsoon 14 2.9885714 5.044404 1.3481737 2.912552
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Home_Range_100mcp ~ Environment + Season + Sex + N + Environment *
Season + (1 | Gila)
Data: seasonal
REML criterion at convergence: 638.5
Scaled residuals:
Min 1Q Median 3Q Max
-2.0273 -0.5931 -0.0665 0.2579 3.2815
Random effects:
Groups Name Variance Std.Dev.
Gila (Intercept) 4.442 2.108
Residual 44.819 6.695
Number of obs: 100, groups: Gila, 30
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 14.61312 2.89899 78.80446 5.041 2.89e-06
Environmentsubsidized -6.62866 2.80355 88.30266 -2.364 0.02025
SeasonEmergence -15.53191 3.06290 69.30082 -5.071 3.16e-06
SeasonMonsoon 2.99228 2.88291 67.22814 1.038 0.30302
SeasonPost_Monsoon -16.49965 3.21222 78.88963 -5.137 1.97e-06
Sexmale 2.64121 1.69487 29.11504 1.558 0.12995
N 0.10913 0.03989 72.75357 2.735 0.00782
Environmentsubsidized:SeasonEmergence 7.62510 4.16148 75.14358 1.832 0.07087
Environmentsubsidized:SeasonMonsoon -6.17899 3.69021 67.26127 -1.674 0.09869
Environmentsubsidized:SeasonPost_Monsoon 9.36224 3.88337 68.51543 2.411 0.01860
(Intercept) ***
Environmentsubsidized *
SeasonEmergence ***
SeasonMonsoon
SeasonPost_Monsoon ***
Sexmale
N **
Environmentsubsidized:SeasonEmergence .
Environmentsubsidized:SeasonMonsoon .
Environmentsubsidized:SeasonPost_Monsoon *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) Envrnm SsnEmr SsnMns SsnP_M Sexmal N Env:SE Env:SM
Envrnmntsbs -0.629
SeasnEmrgnc -0.621 0.527
SeasonMonsn -0.581 0.562 0.524
SsnPst_Mnsn -0.677 0.504 0.525 0.514
Sexmale -0.447 0.079 0.060 0.021 0.071
N -0.581 0.003 0.193 0.065 0.341 0.313
Envrnmnt:SE 0.281 -0.614 -0.678 -0.366 -0.284 0.054 0.159
Envrnmnt:SM 0.499 -0.696 -0.423 -0.786 -0.425 -0.051 -0.121 0.448
Envrnm:SP_M 0.386 -0.654 -0.381 -0.407 -0.735 0.072 -0.005 0.443 0.501
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Environment 261.63 261.63 1 26.365 5.8375 0.0229042 *
Season 2072.56 690.85 3 78.967 15.4143 5.534e-08 ***
Sex 108.84 108.84 1 29.115 2.4285 0.1299532
N 335.38 335.38 1 72.754 7.4829 0.0078202 **
Environment:Season 920.94 306.98 3 71.524 6.8493 0.0004028 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Table 6 | Seasonal home range means between Stone Canyon (subsidized) and Owl Head Buttes (non-subsidized) popuations for males and females. These are raw means before being adjusted for environment, season, sex, and sample size.
Table: Seasonal Means by Sex Between Populations
Environment Season Sex N Home_Range_100mcp sd se ci
-------------- ------------- ------- --- ------------------ ----------- ---------- -----------
nonsubsidized Dry female 5 15.6600000 8.6291946 3.8590932 10.7145603
nonsubsidized Dry male 7 29.4714286 12.6476235 4.7803524 11.6971008
nonsubsidized Emergence female 5 4.4600000 3.4333657 1.5354478 4.2630866
nonsubsidized Emergence male 5 1.1600000 1.8242807 0.8158431 2.2651436
nonsubsidized Monsoon female 6 22.9833333 9.8151753 4.0070285 10.3003948
nonsubsidized Monsoon male 7 24.2285714 9.8668999 3.7293376 9.1253605
nonsubsidized Post_Monsoon female 4 1.4000000 1.4491377 0.7245688 2.3059014
nonsubsidized Post_Monsoon male 7 0.2857143 0.3670993 0.1387505 0.3395102
subsidized Dry female 11 10.1754545 8.0883118 2.4387178 5.4338018
subsidized Dry male 6 18.2816667 13.2661214 5.4158714 13.9219406
subsidized Emergence female 6 2.1133333 1.8474920 0.7542354 1.9388239
subsidized Emergence male 3 2.0666667 1.5326556 0.8848792 3.8073277
subsidized Monsoon female 11 10.6918182 8.4988679 2.5625051 5.7096172
subsidized Monsoon male 7 10.3528571 6.3010018 2.3815548 5.8274547
subsidized Post_Monsoon female 11 3.6309091 5.5527983 1.6742317 3.7304207
subsidized Post_Monsoon male 3 0.6333333 0.8007705 0.4623250 1.9892241

Adjusted Seasonal Means

Post-Hoc comparisons between populations for seasonal home range analysis:
$emmeans
Season = Dry:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 18.86 2.25 88.4 14.383 23.34
subsidized 12.23 1.75 87.4 8.745 15.72
Season = Emergence:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 3.33 2.24 88.7 -1.118 7.77
subsidized 4.32 2.55 84.7 -0.741 9.39
Season = Monsoon:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 21.85 2.03 87.5 17.811 25.89
subsidized 9.04 1.78 86.0 5.515 12.57
Season = Post_Monsoon:
Environment emmean SE df lower.CL upper.CL
nonsubsidized 2.36 2.36 87.0 -2.322 7.04
subsidized 5.09 2.07 85.8 0.981 9.21
Results are averaged over the levels of: Sex
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Season = Dry:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized 6.629 2.81 88.3 2.358 0.0206
Season = Emergence:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized -0.996 3.32 87.7 -0.300 0.7648
Season = Monsoon:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized 12.808 2.66 87.2 4.814 <.0001
Season = Post_Monsoon:
contrast estimate SE df t.ratio p.value
nonsubsidized - subsidized -2.734 2.96 89.4 -0.924 0.3581
Results are averaged over the levels of: Sex
Graphical Comparisons of seasons between the two populatins:

Figure 11 | Pairwise comparisons of each season between environments. Overlapping red bars indicate no statistical difference.
$emmeans
Environment = nonsubsidized:
Season emmean SE df lower.CL upper.CL
Dry 18.86 2.25 88.4 14.383 23.34
Emergence 3.33 2.24 88.7 -1.118 7.77
Monsoon 21.85 2.03 87.5 17.811 25.89
Post_Monsoon 2.36 2.36 87.0 -2.322 7.04
Environment = subsidized:
Season emmean SE df lower.CL upper.CL
Dry 12.23 1.75 87.4 8.745 15.72
Emergence 4.32 2.55 84.7 -0.741 9.39
Monsoon 9.04 1.78 86.0 5.515 12.57
Post_Monsoon 5.09 2.07 85.8 0.981 9.21
Results are averaged over the levels of: Sex
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Environment = nonsubsidized:
contrast estimate SE df t.ratio p.value
Dry - Emergence 15.532 3.07 69.4 5.054 <.0001
Dry - Monsoon -2.992 2.89 67.3 -1.036 0.7292
Dry - Post_Monsoon 16.500 3.24 78.9 5.098 <.0001
Emergence - Monsoon -18.524 2.91 68.0 -6.361 <.0001
Emergence - Post_Monsoon 0.968 3.08 73.0 0.314 0.9891
Monsoon - Post_Monsoon 19.492 3.03 74.0 6.426 <.0001
Environment = subsidized:
contrast estimate SE df t.ratio p.value
Dry - Emergence 7.907 3.11 88.6 2.543 0.0602
Dry - Monsoon 3.187 2.28 66.0 1.395 0.5070
Dry - Post_Monsoon 7.137 2.68 80.2 2.666 0.0450
Emergence - Monsoon -4.720 3.20 89.6 -1.475 0.4569
Emergence - Post_Monsoon -0.769 2.94 77.2 -0.262 0.9937
Monsoon - Post_Monsoon 3.951 2.78 84.9 1.421 0.4899
Results are averaged over the levels of: Sex
P value adjustment: tukey method for comparing a family of 4 estimates
Graphical Comparisons between seasons within the two populations:

Figure 12 | Pairwise comparisons between seasons within each environment against estimated marginal means. Overlapping red bars indicate no statistical difference.
$emmeans
Season = Dry:
Sex emmean SE df lower.CL upper.CL
female 6.92 2.19 47.2 2.523 11.3
male 20.36 2.77 48.3 14.798 25.9
Season = Emergence:
Sex emmean SE df lower.CL upper.CL
female 5.00 2.91 45.2 -0.853 10.9
male 5.63 4.00 49.0 -2.403 13.7
Season = Monsoon:
Sex emmean SE df lower.CL upper.CL
female 6.27 2.34 46.2 1.560 11.0
male 11.39 2.51 48.4 6.354 16.4
Season = Post_Monsoon:
Sex emmean SE df lower.CL upper.CL
female 5.94 2.09 47.9 1.738 10.1
male 3.09 3.99 48.5 -4.937 11.1
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Season = Dry:
contrast estimate SE df t.ratio p.value
female - male -13.441 3.68 47.2 -3.653 0.0006
Season = Emergence:
contrast estimate SE df t.ratio p.value
female - male -0.632 4.73 49.0 -0.134 0.8943
Season = Monsoon:
contrast estimate SE df t.ratio p.value
female - male -5.121 3.53 47.1 -1.449 0.1539
Season = Post_Monsoon:
contrast estimate SE df t.ratio p.value
female - male 2.847 4.36 48.9 0.652 0.5173
Graphical Comparisons between sex within the subsidized population:

Table 7 | Mean individual seasoanl home ranges pooled from the entire study period. Missing values are depicted where no locations for that animal during that period were successfull.
Table: Seasonal Individual Home Ranges.
X Emergence X.1 X.2 Dry X.3 Monsoon X.4 Post.Monsoon X.5
------- ---------- ---------- ------ ------ ------ -------- ------- ------------- ------
Lizard Sex Area (ha) N Area N Area N Area N
M69 Male 0.33 4.00 36.73 24.00 14.84 22.00 0.07 8.00
M67 Male NA NA 5.71 9.00 7.72 7.00 NA NA
M255 Male 3.23 7.00 NA NA 1.07 9.00 NA NA
M215 Male 2.64 7.00 8.28 11.00 7.22 12.00 NA NA
M14 Male NA NA 6.20 15.00 7.50 10.00 NA NA
M119 Male NA NA 27.84 17.00 19.98 67.00 1.55 9.00
M112 Male NA NA 24.93 16.00 14.14 29.00 0.28 8.00
F66 Female 0.33 5.00 9.60 97.00 33.65 79.00 1.36 16.00
F36 Female 2.94 12.00 24.99 99.00 10.30 118.00 19.14 27.00
F252 Female 1.27 8.00 2.54 14.00 6.48 30.00 0.39 9.00
F214 Female NA NA 5.04 10.00 7.79 28.00 1.87 9.00
F200 Female NA NA 4.71 8.00 4.23 40.00 2.05 12.00
F147 Female 5.44 14.00 25.52 57.00 18.21 70.00 7.14 18.00
F146 Female NA NA 9.55 22.00 5.97 17.00 0.03 7.00
F137 Female 1.71 6.00 6.54 43.00 6.95 62.00 2.19 17.00
F135 Female NA N 3.71 25.00 5.72 48.00 0.68 5.00
F114 Female 0.99 12.00 13.66 99.00 10.72 84.00 4.56 24.00
F104 Female NA NA 6.07 70.00 7.59 49.00 0.53 13.00
Means Overall 1.89 13.04 10.56 2.99
Male 2.07 18.28 10.35 0.63
Female 2.11 10.18 10.69 3.63
Seasonal Home Range (KDE)
Table | Raw KDE group means of seasonal home ranges between sexes at Stone Canyon (subsidized).
Table: Raw KDE Group Means of Seasonal Home Ranges between sexes
Season Sex N Home_Range_95kde sd se ci
------------- ------- --- ----------------- ---------- ---------- ----------
Dry female 11 21.05545 10.148020 3.059743 6.817533
Dry male 6 42.79833 32.570181 13.296721 34.180309
Emergence female 5 16.42400 9.143160 4.088946 11.352733
Emergence male 1 14.93000 NA NA NaN
Monsoon female 11 21.41909 11.124279 3.354096 7.473393
Monsoon male 7 31.36143 9.216007 3.483323 8.523385
Post_Monsoon female 9 14.25111 14.074176 4.691392 10.818369
Post_Monsoon male 3 3.49000 4.186419 2.417030 10.399640
Table: Raw KDE Group Means of Seasonal Home Ranges
Season N Home_Range_95kde sd se ci
------------- --- ----------------- ---------- --------- ----------
Dry 17 28.72941 22.596045 5.480346 11.617814
Emergence 6 16.17500 8.200604 3.347883 8.606006
Monsoon 18 25.28556 11.298004 2.662965 5.618365
Post_Monsoon 12 11.56083 13.074142 3.774180 8.306914
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Home_Range_95kde ~ Season + Sex + N + Season * Sex + (1 | Gila)
Data: season.kde
REML criterion at convergence: 385.8
Scaled residuals:
Min 1Q Median 3Q Max
-1.5521 -0.4814 -0.0391 0.3078 4.0086
Random effects:
Groups Name Variance Std.Dev.
Gila (Intercept) 28.37 5.327
Residual 195.80 13.993
Number of obs: 53, groups: Gila, 18
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 18.23503 6.63026 38.31066 2.750 0.00904 **
SeasonEmergence -2.97944 8.74706 43.60362 -0.341 0.73502
SeasonMonsoon -0.05632 6.01025 29.39051 -0.009 0.99259
SeasonPost_Monsoon -5.02474 7.19019 40.48869 -0.699 0.48865
Sexmale 23.42265 8.37161 41.14357 2.798 0.00779 **
N 0.05703 0.09819 33.91214 0.581 0.56521
SeasonEmergence:Sexmale -22.86106 17.87036 41.46355 -1.279 0.20791
SeasonMonsoon:Sexmale -11.51090 9.83940 29.98032 -1.170 0.25127
SeasonPost_Monsoon:Sexmale -35.74342 12.19911 34.68513 -2.930 0.00596 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) SsnEmr SsnMns SsnP_M Sexmal N SsnE:S SsnM:S
SeasnEmrgnc -0.656
SeasonMonsn -0.359 0.281
SsnPst_Mnsn -0.722 0.517 0.355
Sexmale -0.676 0.444 0.303 0.496
N -0.732 0.476 -0.120 0.476 0.421
SsnEmrgnc:S 0.300 -0.476 -0.141 -0.240 -0.423 -0.205
SsnMnsn:Sxm 0.283 -0.213 -0.600 -0.258 -0.625 -0.014 0.290
SsnPst_Mn:S 0.382 -0.276 -0.216 -0.561 -0.587 -0.221 0.262 0.423
ANOVA Table. Seasonal KDE
Type III Analysis of Variance Table with Satterthwaite's method
Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
Season 2654.14 884.71 3 39.026 4.5184 0.008181 **
Sex 179.65 179.65 1 25.426 0.9175 0.347144
N 66.05 66.05 1 33.912 0.3373 0.565207
Season:Sex 1743.14 581.05 3 36.391 2.9675 0.044584 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Raw Seasonal KDE Means

Adjusted Seasonal KDE Means

$emmeans
Season = Dry:
Sex emmean SE df lower.CL upper.CL
female 19.99 4.91 41.5 10.09 29.9
male 43.42 6.39 42.1 30.53 56.3
Season = Emergence:
Sex emmean SE df lower.CL upper.CL
female 17.01 7.24 42.4 2.41 31.6
male 17.58 15.47 43.6 -13.61 48.8
Season = Monsoon:
Sex emmean SE df lower.CL upper.CL
female 19.94 5.25 40.8 9.33 30.6
male 31.85 5.73 42.2 20.29 43.4
Season = Post_Monsoon:
Sex emmean SE df lower.CL upper.CL
female 14.97 5.29 41.3 4.29 25.7
male 2.65 9.13 43.3 -15.77 21.1
Degrees-of-freedom method: kenward-roger
Confidence level used: 0.95
$contrasts
Season = Dry:
contrast estimate SE df t.ratio p.value
female - male -23.423 8.47 41.2 -2.765 0.0085
Season = Emergence:
contrast estimate SE df t.ratio p.value
female - male -0.562 16.72 43.7 -0.034 0.9734
Season = Monsoon:
contrast estimate SE df t.ratio p.value
female - male -11.912 8.07 41.2 -1.475 0.1477
Season = Post_Monsoon:
contrast estimate SE df t.ratio p.value
female - male 12.321 10.14 43.9 1.215 0.2308

Home Range Overlap (MCP)
Gila Monster Home Range Overlap of 100% MCPs.
Figure 13 | Interactive map: Home Range overlap by sex of 100% MCPs at Stone Canyon. Red polygons represent female lizards, and blue represents male lizards.
The Stone Canyon population seems to exhibit greater female-female overlap as well as considerable overlap of male-female home ranges. There appears to be limited male-male overlap, with occurance happening in only two male-male home range polygons. This finding is in contrast to the Owl Head buttes study which revealed that there was a large degree of overlap among male-female and male-male overlaps (Table x). Gillardo concluded that, in their study, the high degree of overlap in males-males interactions may be due to having larger home ranges for mate searching activities. Males may have and increased home range size to maximize their access to multiple females. She concluded that the lack of female-female overlap may be due to smaller home range sizes.
At Stone Canyon, males have reduced home range sizes (Table 6; Fig. 4). However, males still retain home range overlap with multiple females while having reduced contact with other males. This may be in response to nutrient subsidies that reduce the need to have expanded home range sizes for foraging activities for both males and females. There may also be a higher density of females as a response to resource availability and reduced range requirements. Males are not forced to expand home ranges for mate searching to the extant that individuals at Owl Head Buttes may be subject to.
Table 8 | Home range overlap of Gila Monsters at the nutrient subsidized site. Male-male overlaps only occured between two pairs of males: M14-M69 and M119-M215 at 0.5 ha. and 19.5 ha. respectively and were therefore not included in the table.
Table: Home range overlap of Stone Canyon Gila Monsters using 100% MCPs.
ID F36 F66 F104 F135 F137 F146 F147 X M14 M67 M69 M112 M119 M215 M255
-------------- ----------- ----- ----- ----- ----- ----- ----- ------------ ------------ ----- ----- ------ ------ ------ -----
Female:Female Male:Female
F36 _ 5.13 _ _ _ 4.65 _ _ _ _ _ 19.44 18.51 _
F66 5.13 _ _ _ _ 5.05 _ _ _ 2.6 _ _ _ _
F104 _ _ _ 0.5 _ _ _ _ _ _ _ _ _
F114 _ _ _ _ _ _ _ _ _ _ 5.82 _ _ _
F135 _ _ 0.5 _ 2.89 _ 3.94 _ _ 2.04 _ _ _ _
F137 _ _ _ 2.89 _ _ 7.91 _ _ 0.55 _ _ _ _
F146 4.65 5.05 _ _ _ _ _ 0.14 _ 0.76 _ _ _ _
F147 _ _ _ 3.94 7.91 _ _ 3.73 0.21 4.6 _ _ _ _
F200 _ _ _ _ _ _ _ _ _ _ 6.49 _ _ _
F252 _ _ _ _ _ _ _ _ _ _ _ _ _ 3.45
Mean = 4.3 ± 0.86 Mean = 5.26 ± 1.78
ID F36 F66 F104 F135 F137 F146 F147 M14 M67 M69 M112 M119 M215 M255
Female:Female Male:Female
Net 6.84 7.25 0.5 4.44 7.91 6.77 8.96 3.87 0.21 8.57 12.31 21.24 20.32 3.45
Prportion 0.2 0.2 0.1 0.5 1 0.7 0.3 0.4 0.02 0.5 0.4 0.6 1 0.2
Table: Home Range Overlap Summary
Interaction N OL sd se ci
-------------- --- --------- ---------- ---------- ----------
Female_Female 7 4.295714 2.271694 0.8586198 2.100967
Male_Female 13 5.256923 6.429806 1.7833074 3.885493
Male_Male 4 9.980000 10.958108 5.4790541 17.436795
Home Range Overlap (KDE)
Figure 14 | Interactive map: Home Range overlap by sex of 95% KDEs at Stone Canyon. Red polygons represent female lizards, and blue represents male lizards.



$tm_layout
$tm_layout$frame
[1] FALSE
$tm_layout$style
[1] NA
attr(,"class")
[1] "tm"

LS0tCnRpdGxlOiAiU3BhdGlhbCBFY29sb2d5IEdpbGEgTW9uc3RlcnMgaW4gYSBSZXNvdXJjZSBTdWJzaWRpemVkIEVudmlyb25tZW50IgphdXRob3I6ICJNLiBQaWVyc29uIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICBkZl9wcmludDogcGFnZWQKICByb3dzLnByaW50OiAxMAogIHRoZW1lOiBjb3NtbwogIGhpZ2hsaWdodDogYnJlZXplZGFyawogIG51bWJlcl9zZWN0aW9uczogeWVzCiAgdG9jOiB0cnVlCiAgdG9jX2Zsb2F0OiB0cnVlCiAgY29sbGFwc2VkOiBmYWxzZQogIHNtb290aF9zY3JvbGw6IHRydWUKcGRmX2RvY3VtZW50OiBkZWZhdWx0CmVkaXRvcl9vcHRpb25zOiAKY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQotLS0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCmgxLnRpdGxlIHsKICBmb250LXNpemU6IDQwcHg7CiAgZm9udC1mYW1pbHk6ICJDYWxpYnJpIiwgVGltZXMsIHNlcmlmOwogIGNvbG9yOiBEYXJrQmx1ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KaDQuYXV0aG9yIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICBmb250LXNpemU6IDIwcHg7CiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgY29sb3I6IERhcmtCbHVlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQo8L3N0eWxlPgoKIyBBQlNUUkFDVDogCkFuaW1hbCBtb3ZlbWVudHMgYXJlIG9mdGVuIGRlZmluZWQgdXNpbmcgdGhlIGhvbWUgcmFuZ2UgY29uY2VwdC4gQ29uc2VxdWVudGx5LCBob21lIHJhbmdlcyBhcmUgZGV0ZXJtaW5lZCBieSB0ZW1wb3JhbCwgc3BhdGlhbCwgYW5kIGluZGl2aWR1YWwtbGV2ZWwgcHJvY2Vzc2VzLiBXaXRoaW4gdGhlIGVudmlyb25tZW50LCBvbmUgb2YgdGhlIGtleSBmYWN0b3JzIGluZmx1ZW5jaW5nIGFuIGFuaW1hbOKAmXMgcmFuZ2UgYW5kIGhvdyBpdCB1c2VzIHRoZSBlbnZpcm9ubWVudCBpcyB0aGF0IG9mIHJlc291cmNlcy4gIEFsdGVyYXRpb25zIHRvIHRoZSBlbnZpcm9ubWVudCB0aGF0IGFmZmVjdCByZXNvdXJjZSBkaXN0cmlidXRpb24gYW5kIGF2YWlsYWJpbGl0eSBjYW4gaGF2ZSBwcm9mb3VuZCBjb25zZXF1ZW5jZXMgb24gYW4gYW5pbWFs4oCZcyBzcGF0aWFsIHBhdHRlcm5zLiBPbmUgb2YgdGhlIGJlc3QgZXhhbXBsZXMgb2YgdGhpcyBpcyB0aGF0IG9mIGdvbGYgY291cnNlcy4gIFNvbWUgZW52aXJvbm1lbnRhbCBtb2RpZmljYXRpb25zIGV4aGliaXRlZCBieSBzb21lIGh1bWFuIGFsdGVyZWQgZW52aXJvbm1lbnQgY2FuIGhhdmUgcG9zaXRpdmUgZWZmZWN0cyBvbiBjZXJ0YWluIHdpbGRsaWZlIHNwZWNpZXMgYnkgYWx0ZXJpbmcgdGhlaXIgbW92ZW1lbnQgcGF0dGVybnMgYW5kIGZvcmFnaW5nIGVmZm9ydHMuICBXZSBhbmFseXplZCBkYXRhIGNvbGxlY3RlZCBmcm9tIDIyIEdpbGEgTW9uc3RlcnMgSGVsb2Rlcm1hIHN1c3BlY3R1bSBhdCBhIHN1YnNpZGl6ZWQgZW52aXJvbm1lbnQgaW4gQXJpem9uYSBmcm9tIDIwMDcgdG8gMjAxMyBhbmQgYSBub24tc3Vic2lkaXplZCBlbnZpcm9ubWVudC4gIFdlIHBlcmZvcm1lZCBib3RoIGtlcm5lbCBkZW5zaXR5IGVzdGltYXRpb24gYW5kIG1pbmltdW0gY29udmV4IHBvbHlnb25zIGZvciBjb21wYXJhYmlsaXR5IHB1cnBvc2VzLiAgQWZ0ZXIgYWRqdXN0aW5nIGZvciBzZXgsIG51bWJlciBvZiBmaXhlcywgYW5kIHllYXIsIG1hbGVzIGluIHRoZSBzdWJzaWRpemVkIGVudmlyb25tZW50IGhhZCBhbiBhdmVyYWdlIGFyZWEgb2YgMTUuOSBoYSB3aGlsZSB0aGUgZmVtYWxlcyBoYWQgYW4gYXJlYSBvZiA1LjkgaGEuICBJbiB0aGUgdW4tc3Vic2lkaXplZCBlbnZpcm9ubWVudCBtYWxlcyBoYWQgYW4gYXZlcmFnZSByYW5nZSBvZiAzOC44IGhhIHdoaWxlIGZlbWFsZXMgaGFkIGFuIGFyZWEgb2YgMjkuOCBoYS4gIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgaG9tZSByYW5nZXMgbWF5IGJlIHNtYWxsZXIgaW4gc3Vic2lkaXplZCBlbnZpcm9ubWVudHMgdGhhbiB0aG9zZSBvZiB1bi1zdWJzaWRpemVkIGVudmlyb25tZW50cyBkdWUgdG8gaW5jcmVhc2VzIGluIGF2YWlsYWJsZSByZXNvdXJjZXMuIFRoZXJlIHdlcmUgYWxzbyBkaWZmZXJlbmNlcyBpbiBob21lIHJhbmdlIG92ZXJsYXAgd2l0aGluIGFuZCBiZXR3ZWVuIHNleGVzLiBJbiB0aGUgc3Vic2lkaXplZCBwb3B1bGF0aW9uLCB0aGVyZSB3YXMgdmVyeSBsaXR0bGUgbWFsZS1tYWxlIG92ZXJsYXAgd2l0aCBvbmx5IHR3byBvY2N1cmFuY2VzLCBtb3JlIGZlbWFsZS1mZW1hbGUgb3ZlcmxhcCBhbmQgbWFsZS1mZW1hbGUgb3ZlcmxhcCB3YXMgaW5jcmVhc2VkLiBNYWxlIGhvbWUgcmFuZ2VzIG9mdGVuIG92ZXJsYXBwZWQgc2V2ZXJhbCBmZW1hbGUgaG9tZSByYW5nZXMuIEdpbGEgTW9uc3RlcnMgbWF5IG5vdCBoYXZlIHRvIGludmVzdCBpbiB3aWRlIHJhbmdpbmcgZm9yYWdpbmcgZWZmb3J0cyBhcyB0aG9zZSBwb3B1bGF0aW9ucyBvZiB0aGUgdW4tc3Vic2lkaXplZCBlbnZpcm9ubWVudHMuICAKCgpPdmVydmlldyBvZiB0aGUgc3BhdGlhbCBlY29sb2d5IG9mIEdpbGEgTW9uc3RlcnMgKCpIZWxvZGVybWEgc3VzcGVjdHVtKikgYXQgU3RvbmUgQ2FueW9uIEdvbGYgQ2x1YiBhcyBhIHJlc291cmNlIHN1YnNpZGl6ZWQgcG9wdWxhdGlvbiB2cy4gT3dsIEhlYWQgQnV0dGVzIHJlcHJlc2VudGluZyB0aGUgdW5zdWJzaXplZCBuYXR1cmFsIHBvcHVsYXRpb24uIENvbXBhcmVkIGhvbWUgcmFuZ2Ugc2l6ZXMgb2YgKkhlbG9kZXJtYSBzdXNwZWN0dW0qIGJldHdlZW4gdHdvIHBvcHVsYXRpb25zLiBPbmUgcmVwcmVzZW50ZWQgYSBzdWJzaWRpemVkIHBvcHVsYXRpb24gYXQgU3RvbmUgQ2FueW9uIEdvbGYgQ2x1YiBhbmQgdGhlIG90aGVyIGF0IE93bCBIZWFkIEJ1dHRlcyByZXByZXNlbnRpbmcgdGhlIHVuc3Vic2lkaXplZCBwb3B1bGF0aW9uLiBTdG9uZSBDYW55b24gaXMgbG9jYXRlZCBpbiBPcm8gVmFsbGV5IG9uIHRoZSBub3J0aCBlbmQgb2YgVHVjc29uLCBBcml6b25hLiAgT3dsIEhlYWQgQnV0dGVzIGlzIGxvY2F0ZWQgYWJvdXQgMTcga20gc3RyYWlnaHQgbGluZSBkaXN0YW5jZSBub3J0aCB3ZXN0IGZyb20gU3RvbmUgQ2FueW9uLiBEYXRhIGF0IE93bCBIZWFkIHdhcyBjb2xsZWN0ZWQgZnJvbSAyMDAwIC0gMjAwMiwgd2hpbGUgZml4ZXMgd2VyZSBjb2xsZWN0ZWQgZnJvbSAyMDA3IC0gMjAxMyBhdCBTdG9uZSBDYW55b24uIFdlIENhbGN1bGF0ZWQgbWluaW11bSBjb252ZXggcG9seWdvbnMgdXNpbmcgYm90aCA5NSBwZXJjZW50IGFuZCAxMDAgcGVyY2VudCBvZiB0aGUgbG9jYXRpb25zIGZvciBlYWNoIGxpemFyZCwgYXMgd2VsbCBhcyA5NSUgYW5kIDUwJSBLZXJuZWwgRGVuc2l0eSBFc3RpbWF0aW9ucyAoS0RFKS4KCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KIyBMT0FEIFBBQ0tBR0VTIAoKbGlicmFyeSh0aWR5dmVyc2UpIApsaWJyYXJ5KGtuaXRyKSAjICBtYWtlIHRhYmxlcwpsaWJyYXJ5KGxlYWZsZXQpCmxpYnJhcnkobG1lNCkKbGlicmFyeShsbWVyVGVzdCkKbGlicmFyeShyZWFkcikKbGlicmFyeShnZ3Bsb3QyKQojIGxpYnJhcnkoZHBseXIpCmxpYnJhcnkoZ2dmb3J0aWZ5KQpsaWJyYXJ5KG9yZGluYWwpCmxpYnJhcnkobHNtZWFucykKbGlicmFyeShlbW1lYW5zKQpsaWJyYXJ5KG1hcHZpZXcpCmxpYnJhcnkoYWRlaGFiaXRhdEhSKQpsaWJyYXJ5KGdnbWFwKQoja25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAxLzMpICNmb3JjZSBmaWd1cmVzIHRvIGJlIGNlcnRhaW4gc2l6ZSBhbmQgYXNwZWN0IHJhdGlvCmBgYAoKCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0UsIGNhY2hlPVRSVUV9CiMgZ2dtYXA6OnJlZ2lzdGVyX2dvb2dsZShrZXkgPSAiQUl6YVN5QmpoaEU5cGVSQm1TMWg5V1lReDFrNU1GX1hBWHFVZlNzIikKCnAzPC0gZ2dtYXAoZ2V0X2dvb2dsZW1hcChjZW50ZXIgPSBjKGxvbiA9IC0xMTAuOTkwODgsIGxhdCA9IDMyLjQ2ODc4KSwKICAgICAgICAgICAgICAgICAgICAgICAgIHpvb20gPSAxNSwgc2NhbGUgPSAyLG1hcHR5cGUgPSdzYXRlbGxpdGUnLGFyY2hpdmluZyA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9ICdjb2xvcicpKQoKIyBwMwoKTG9uZ2l0dWRlPC1jKC0xMTAuOTc4LC0xMTAuOTc4LC0xMTAuOTgwLC0xMTAuOTgzLC0xMTAuOTg1LC0xMTAuOTg4LC0xMTAuOTkwLC0xMTAuOTk0LC0xMTAuOTk1LAogICAgICAgICAgICAgLTExMC45OTcsLTExMS4wMDMsLTExMS4wMDQsLTExMS4wMDQyLC0xMTEuMDAwLC0xMTAuOTk1LC0xMTAuOTg1LC0xMTAuOTc4LC0xMTAuOTgpCgpMYXRpdHVkZTwtYygzMi40NjMsMzIuNDYyLDMyLjQ2MiwzMi40NjEsMzIuNDYxLDMyLjQ2MCwzMi40NjIsMzIuNDY0LDMyLjQ2NiwzMi40NjgsMzIuNDY4LAogICAgICAgICAgICAzMi40NjksMzIuNDczLDMyLjQ3MzMsMzIuNDcyLDMyLjQ3NCwzMi40NzEsMzIuNDY3KQoKbXljb29yZGRhdGEgPC0gYXMuZGF0YS5mcmFtZShjYmluZChMb25naXR1ZGUsTGF0aXR1ZGUpKQoKcDMrZ2VvbV9wb2x5Z29uKGRhdGE9bXljb29yZGRhdGEsYWVzKHg9TG9uZ2l0dWRlLHk9TGF0aXR1ZGUpLGFscGhhPTAuMixjb2xvdXI9InJlZCIsCiAgICAgICAgICAgICAgICBmaWxsPSJyZWQiKSsKICBnZW9tX3BhdGgoZGF0YT1teWNvb3JkZGF0YSxhZXMoeD1Mb25naXR1ZGUseT1MYXRpdHVkZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyPSJ3aGl0ZSIsYWxwaGE9MC40LHNpemU9MikrCiAgYW5ub3RhdGUoInRleHQiLCB4PS0xMTAuOTg5LHk9MzIuNDY4LGxhYmVsPSJTdG9uZSBDYW55b24gQ2x1YiIsY29sb3VyPSJ3aGl0ZSIsc2l6ZT0zKSsKICAjIHNjYWxlYmFyKHgubWluID0gLTExMS4wMDUsIHgubWF4ID0gLTExMC45NzUsCiAgIyAgICAgICAgIHkubWluID0gMzIuNDU1LCB5Lm1heCA9IDMyLjQ4MCwgYW5jaG9yID0gTlVMTCwKICAjICAgICAgICAgIGRpc3QgPSA1MCwgdHJhbnNmb3JtPVRSVUUsZGlzdF91bml0PSJtIiwgbW9kZWwgPSAnV0dTODQnKSsKICBsYWJzKHRpdGxlID0gIlNDR0MgU3R1ZHkgU2l0ZSBPcm8gVmFsbGV5IEFyaXpvbmEiKQpgYGAKRmlndXJlIDEgfCBTdG9uZSBDYW55b24gR29sZiBDbHViLCBsb2NhdGVkIGluIE9ybyBWYWxsZXksIEFyaXpvbmEgb24gdGhlIG5vcnRoZXJuIGVkZ2Ugb2YgVHVjc29uLgoKCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmxpYnJhcnkoZGlzbW8pCmxpYnJhcnkocmdiaWYpCmxpYnJhcnkodXRpbHMpCmxpYnJhcnkocmVhZHhsKQpsaWJyYXJ5KHNwb3RpZnlyKQpsaWJyYXJ5KGdncmlkZ2VzKQpsaWJyYXJ5KHZpcmlkaXMpCmxpYnJhcnkocmFzdGVyVmlzKQoKIyMgVVNJTkcgRElTTU86CmV4dGVudCA8LSBleHRlbnQoLTEzMCwtNzAsMjAsNjApCgpILnN1c3AgPC0gZ2JpZigiaGVsb2Rlcm1hIiwgc3BlY2llcyA9ICJzdXNwZWN0dW0iLCBleHQgPSBleHRlbnQsCiAgICAgICAgICAgICBnZW8gPSBUUlVFLCBzcCA9IFRSVUUsIGRvd25sb2FkID0gVFJVRSwKICAgICAgICAgICAgIHJlbW92ZVplcm9zID0gVFJVRSkKCkguc3VzcF94eSA8LSBhcy5kYXRhLmZyYW1lKGNiaW5kKEguc3VzcEBjb29yZHNbLDFdLEguc3VzcEBjb29yZHNbLDJdKSkKY29sbmFtZXMoSC5zdXNwX3h5KSA8LSBjKCJsb25naXR1ZGUiLCJsYXRpdHVkZSIpCgp1cyA8LSBtYXBfZGF0YSgic3RhdGUiKQoKIyBnZ3Bsb3QoZGF0YSA9IEguc3VzcF94eSwgYWVzKHg9bG9uZ2l0dWRlLCB5PWxhdGl0dWRlKSkgKwojICAgZ2VvbV9wb2x5Z29uKGRhdGEgPSB1cywgYWVzKHg9bG9uZywgeSA9IGxhdCwgZ3JvdXAgPSBncm91cCksCiMgICAgICAgICAgICAgICAgZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yPSJibGFjayIpICsKIyAgIGdlb21fcG9pbnQoKSArIHhsYWIoIkxvbmdpdHVkZSIpICsgeWxhYigiTGF0aXR1ZGUiKSArCiMgICBjb29yZF9maXhlZCh4bGltID0gYygtMTIwLC0xMDYpLCB5bGltID0gYygzMCw0MSkpCgojIyAgVVNJTkcgUkdCSUY6Ckguc3VzcF9sdSA8LSBuYW1lX2xvb2t1cChxdWVyeSA9ICdoZWxvZGVybWEgc3VzcGVjdHVtJywgcmV0dXJuID0gJ2RhdGEnKQoKSC5zdXNwX2NvZGUgPC0gcHJpbnQoYXMuaW50ZWdlcihuYW1lcyh3aGljaC5tYXgodGFibGUoSC5zdXNwX2x1JG51YktleSkpKSkpCgpvY2NfY291bnQodGF4b25LZXkgPSBILnN1c3BfY29kZSwgZ2VvcmVmZXJlbmNlZCA9IFRSVUUpCgp1c2EgPC0gaXNvY29kZXNbZ3JlcCgiVW5pdGVkIFN0YXRlcyIsIGlzb2NvZGVzJG5hbWUpLCAiY29kZSJdCkguc3VzcF9kYXRhIDwtIG9jY19zZWFyY2godGF4b25LZXkgPSBILnN1c3BfY29kZSwgCiAgICAgICAgICAgICAgICAgICByZXR1cm4gPSAnZGF0YScsIAogICAgICAgICAgICAgICAgICAgY291bnRyeSA9IHVzYSwgCiAgICAgICAgICAgICAgICAgICBoYXNDb29yZGluYXRlID0gVFJVRSkKCkguc3VzcF9kZiA8LSBhcy5kYXRhLmZyYW1lKGNiaW5kKEguc3VzcF9kYXRhJFVTJHNjaWVudGlmaWNOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC5zdXNwX2RhdGEkVVMkaW5zdGl0dXRpb25Db2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC5zdXNwX2RhdGEkVVMkc3RhdGVQcm92aW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEguc3VzcF9kYXRhJFVTJHZlcmJhdGltTG9jYWxpdHkpKQoKY29vcmRzIDwtIGNiaW5kKHR5cGUuY29udmVydChILnN1c3BfZGF0YVtbIlVTIl1dW1siZGVjaW1hbExvbmdpdHVkZSJdXSwgYXMuaXMgPSBUUlVFKSwKICAgICAgICAgICAgICAgIHR5cGUuY29udmVydChILnN1c3BfZGF0YVtbIlVTIl1dW1siZGVjaW1hbExhdGl0dWRlIl1dLCBhcy5pcyA9IFRSVUUpKQoKSC5zdXNwX2luZm8gPC0gY2JpbmQoSC5zdXNwX2RmLGNvb3JkcykKCmNvbG5hbWVzKEguc3VzcF9pbmZvKSA8LSBjKCJzcGVjaWVzIiwiZGF0YXNldCIsInN0YXRlIiwibG9jYXRpb24iLCJsb25naXR1ZGUiLCJsYXRpdHVkZSIpCgpsaWJyYXJ5KGdyaWQpCk5hdmFkYSA8LSBncmlkLnRleHQocGFzdGUoIk5hdmFkYSIpLHg9MC41NSwgIHk9MC44MSkKVXRhaCA8LSBncmlkLnRleHQocGFzdGUoIlV0YWgiKSwgeD0wLjE5LCAgeT0wLjM2KQpBcml6b25hIDwtIGdyaWQudGV4dChwYXN0ZSgiQXJpem9uYSIpLCB4PTAuNTUsICB5PTAuODEpCkNhbGlmb3JuaWEgPC0gZ3JpZC50ZXh0KHBhc3RlKCJDYWxpZm9ybmlhIiksIHg9MC4xOSwgIHk9MC4zNikKTmV3Lk1leGljbyA8LSBncmlkLnRleHQocGFzdGUoIk5ldy5NZXhpY28iKSwgeD0wLjU1LCAgeT0wLjgxKQoKCiMjIE5vdyB3ZSBhcmUgcmVhZHkgdG8gZmluYWxpemUgdGhlIGFlc3RoZXRpY3MgYW5kIG9wdGlvbnMgZm9yIGRpc3BsYXlpbmcgdGhlIG5ldyBnYmlmIGRhdGEuCmdncGxvdChkYXRhID0gSC5zdXNwX2luZm8sIGFlcyh4PWxvbmdpdHVkZSwgeT1sYXRpdHVkZSkpICsKICBnZW9tX3BvbHlnb24oZGF0YSA9IHVzLCBhZXMoeD1sb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwKICAgICAgICAgICAgICAgZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yPSJibGFjayIpICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IHN0YXRlKSkgKwogIGNvb3JkX2ZpeGVkKHhsaW0gPSBjKC0xMTksLTEwNyksIHlsaW0gPSBjKDMxLDQxKSkgKwogIHhsYWIoIkxvbmdpdHVkZSIpICsgeWxhYigiTGF0aXR1ZGUiKSArIGdndGl0bGUoIlVTIEdpbGEgTW9uc3RlciBEaXN0cmlidXRpb24iKSArIAogIGd1aWRlcyhjb2xvcj1ndWlkZV9sZWdlbmQoIkxlZ2VuZCIpKSArIAogIHRoZW1lX2J3KCkgKyB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkgKyAKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKSArCiAgdGhlbWUobGVnZW5kLnRpdGxlLmFsaWduID0gMC41LCBsZWdlbmQuYm94Lmp1c3QgPSAiY2VudGVyIikgKwogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksIAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCkpCiAgICAgICMgYW5ub3RhdGlvbl9jdXN0b20oTmF2YWRhKSArIGFubm90YXRpb25fY3VzdG9tKFV0YWgpICsgYW5ub3RhdGlvbl9jdXN0b20oQXJpem9uYSkgKwogICAgICAjIGFubm90YXRpb25fY3VzdG9tKENhbGlmb3JuaWEpICsgYW5ub3RhdGlvbl9jdXN0b20oTmV3Lk1leGljbykpCmBgYAoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KYmlvY2xpbSA8LSBnZXREYXRhKG5hbWUgPSAid29ybGRjbGltIiwgcmVzID0gMi41LCB2YXIgPSAiYmlvIiwgcGF0aCA9ICIuL0RhdGEvIikKCm5hbWVzKGJpb2NsaW0pIDwtIGMoIkFubiBNZWFuIFRlbXAiLCJNZWFuIERpdXJuYWwgUmFuZ2UiLCJJc290aGVybWFsaXR5IiwKICAgICAgICAgICAgICAgICAgICAiVGVtcGVyYXR1cmUgU2Vhc29uYWxpdHkiLCJNYXggVGVtcCBXYXJtZXN0IE1vIiwiTWluIFRlbXAgQ29sZGVzdCBNbyIsCiAgICAgICAgICAgICAgICAgICAgIkFubiBUZW1wIFJhbmdlIiwiTWVhbiBUZW1wIFdldHRlc3QgUXRyIiwiTWVhbiBUZW1wIERyaWVzdCBRdHIiLAogICAgICAgICAgICAgICAgICAgICJNZWFuIFRlbXAgV2FybWVzdCBRdHIiLCJNZWFuIFRlbXAgQ29sZGVzdCBRdHIiLCJBbm51YWwgUHJlY2lwIiwKICAgICAgICAgICAgICAgICAgICAiUHJlY2lwIFdldHRlc3QgTW8iLCJQcmVjaXAgRHJpZXN0IE1vIiwiUHJlY2lwIFNlYXNvbmFsaXR5IiwKICAgICAgICAgICAgICAgICAgICAiUHJlY2lwIFdldHRlc3QgUXRyIiwiUHJlY2lwIERyaWVzdCBRdHIiLCJQcmVjaXAgV2FybWVzdCBRdHIiLAogICAgICAgICAgICAgICAgICAgICJQcmVjaXAgQ29sZGVzdCBRdHIiKQoKIyBiaW9fZXh0ZW50IDwtIGV4dGVudCh4ID0gYygKIyAgIG1pbihILnN1c3BfeHkkbG9uZ2l0dWRlKSwKIyAgIG1heChILnN1c3BfeHkkbG9uZ2l0dWRlKSwKIyAgIG1pbihILnN1c3BfeHkkbGF0aXR1ZGUpLAojICAgbWF4KEguc3VzcF94eSRsYXRpdHVkZSkpKQoKYmlvX2V4dGVudCA8LSBleHRlbnQoeCA9IGMoCiAgbWluKC0xMTgpLAogIG1heCgtMTA1KSwKICBtaW4oMzApLAogIG1heCg0MCkpKQoKCmJpb2NsaW1fZXh0ZW50IDwtIGNyb3AoeCA9IGJpb2NsaW0sIHkgPSBiaW9fZXh0ZW50KQpiaW9jbGltX21vZGVsIDwtIGJpb2NsaW0oeCA9IGJpb2NsaW1fZXh0ZW50LCBwID0gSC5zdXNwX3h5KQpwcmVzZW5jZV9tb2RlbCA8LSBkaXNtbzo6cHJlZGljdChvYmplY3QgPSBiaW9jbGltX21vZGVsLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGJpb2NsaW1fZXh0ZW50LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ID0gYmlvX2V4dGVudCkKCiMgSC5zdXNwX2luZm8KZ3Bsb3QocHJlc2VuY2VfbW9kZWwpICsgCiAgZ2VvbV9yYXN0ZXIoYWVzKGZpbGw9dmFsdWUpKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSB1cywgYWVzKHg9IGxvbmcsIHkgPSBsYXQsIGdyb3VwID0gZ3JvdXApLAogICAgICAgICAgICAgICBmaWxsID0gTkEsIGNvbG9yPSJibGFjayIpICsKICBnZW9tX3BvaW50KGRhdGEgPSBILnN1c3BfaW5mbywgYWVzKHggPSBsb25naXR1ZGUsIHkgPSBsYXRpdHVkZSksIGNvbG9yID0gImJsYWNrIiwgCiAgICAgICAgICAgICBhbHBoYSA9IDAuNSkgKwogIHNjYWxlX2ZpbGxfZ3JhZGllbnRuKGNvbG91cnM9YygiYnJvd24iLCJ5ZWxsb3ciLCJkYXJrZ3JlZW4iKSwgIlByb2JhYmlsaXR5IikgKwogIGNvb3JkX2ZpeGVkKHhsaW0gPSBjKC0xMTcsLTEwNiksIHlsaW0gPSBjKDMxLDM5KSkgKwogIHhsYWIoIkxvbmdpdHVkZSIpICsgeWxhYigiTGF0aXR1ZGUiKSArIGdndGl0bGUoIlByb2JhYmlsaXR5IG9mIEdpbGEgTW9uc3RlciBPY2N1cnJlbmNlIikgKyAKICB0aGVtZV9idygpICsgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpICsgCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IikrCiAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSkKYGBgCgoKCgoKCiMgT3ZlcmFsbCBZZWFybHkgSG9tZSBSYW5nZXMgKE1DUCkKCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5TdW1tYXJ5IG9mIGhvbWUgcmFuZ2Ugc2l6ZS48L3NwYW4+CgpUYWJsZSAxIHwgUG9vbGVkIG92ZXJhbGwgaG9tZSByYW5nZXMgb2YgR2lsYSBNb25zdGVycyBhdCBPd2wgSGVhZCBCdXR0ZXMgYW5kIFN0b25lIENhbnlvbiBHb2xmIENsdWIuIEJvdGggMTAwJSBhbmQgOTUlIE1DUHMgd2VyZSBjYWxjdWxhdGVkIGJldHdlZW4gYm90aCBwb3B1bGF0aW9ucy4gCmBgYHtyIEhvbWUgcmFuZ2Ugc2l6ZXMgb2YgU3RvbmUgQ2FueW9uIGFuZCBPd2wgSGVhZCBCdXR0ZXMgYnkgeWVhci4sIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpHTV90YWJsZSA8LSByZWFkX2NzdigiR01fdGFibGUuY3N2IikKa2FibGUoR01fdGFibGUsZm9ybWF0PSJwYW5kb2MiLCBjYXB0aW9uPSdIb21lIHJhbmdlIHNpemVzIG9mIFN0b25lIENhbnlvbiBhbmQgT3dsIGhlYWQgQnV0dGVzIHVzaW5nIGJvdGggOTUgcGVyY2VudCBhbmQgMTAwIHBlcmNlbnQgTUNQcy4nKQpgYGAKCgoKCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5HaWxhIE1vbnN0ZXIgSG9tZSBSYW5nZSBTaXplcyBhdCBTdG9uZSBDYW55b24gdnMuIE93bCBIZWFkIEJ1dHRlcy48L3NwYW4+CgoKYGBge3IgU3RvbmUgQ2FueW9uIFZzLiBPd2wgSGVhZCBCdXR0ZXMsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnllYXIgPC0gcmVhZF9jc3YoIkdNX0NvbnNvbGlkYXRlZF9CeVllYXIuY3N2IikKCiMgcXVpY2sgcGxvdApHcmFwaDE8LWdncGxvdCh5ZWFyLGFlcyh4PU4xMDAseT1Ib21lX1JhbmdlXzEwMG1jcCxncm91cD1FbnZpcm9ubWVudCkpKwogIGdlb21fcG9pbnQoYWVzKHNoYXBlID0gZmFjdG9yKEVudmlyb25tZW50KSksIHNpemUgPSAyKSsKICBnZW9tX3Ntb290aChtZXRob2Q9bG0pKwogICMgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXM9YyhzdWJzaWRpemVkPSJjeWFuMyIsbm9uc3Vic2lkaXplZD0iaW5kaWFuIHJlZDEiKSkrCiAgIyBsYWJzKHRpdGxlID0gIjEwMCUgTUNQIEhvbWUgUmFuZ2VzIikrCiAgeGxhYigiTnVtYmVyIG9mIFJlbG9jYXRpb25zIikrCiAgeWxhYigiQXJlYSAoaGEpIHVzaW5nIDEwMCUgTUNQIikrCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIixzZT1GQUxTRSkrCiAgbGFicyhjYXB0aW9uID0gIkZpZ3VyZSAyIHwgTm9uLVN1YnNpZGl6ZWQgKE93bCBIZWFkIEJ1dHRlcykgdnMuIFN1YnNpZGl6ZWQgKFN0b25lIENhbnlvbikgcG9wdWxhdGlvbiAxMDAlIE1DUHMgYWdhaW5zdCBudW1iZXIgXG4gb2YgZml4ZXMgZm9yIGVudGlyZSBkYXRhIHNldC4iKSsKICB0aGVtZShwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLGxpbmVoZWlnaHQgPSAwLjkpKQogICMgdGhlbWVfYncoKQoKR3JhcGgxPC1HcmFwaDErdGhlbWUoYXhpcy50aXRsZT1lbGVtZW50X3RleHQoc2l6ZSA9IDE0KSkKCiMgbGVnZW5kIGF0IHRvcC1sZWZ0LCBpbnNpZGUgdGhlIHBsb3QKU0NPSC5oci5maWc8LUdyYXBoMSArIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgbGVnZW5kLmp1c3RpZmljYXRpb249YygwLDEpLAogICAgICAgICAgICAgICBsZWdlbmQucG9zaXRpb249YygwLjA1LCAwLjk1KSwKICAgICAgICAgICAgICAgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgIGxlZ2VuZC5rZXkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siKSkKU0NPSC5oci5maWcKIyBkaXIuY3JlYXRlKCJvdXRwdXRzIikgIyBjcmVhdGUgYSBuZXcgZm9sZGVyIHRvIGhvbGQgdGhlIG91dHB1dCBmaWxlcwojIGdnc2F2ZSgib3V0cHV0cy9TQ19PSEJfcGxvdC5wZGYiKQpgYGAKCgoKCmBgYHtyIGV2YWw9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIG1jcF9hbmFseXNpcyA8LSBmdW5jdGlvbihmaWxlbmFtZSwgcGVyY2VudGFnZSl7CiMgICBkYXRhIDwtIHJlYWQuY3N2KGZpbGUgPSBmaWxlbmFtZSkKIyAgIHggPC0gYXMuZGF0YS5mcmFtZShkYXRhJEVBU1RJTkcpCiMgICB5IDwtIGFzLmRhdGEuZnJhbWUoZGF0YSROT1JUSElORykKIyAgIHh5IDwtIGMoeCx5KQojICAgZGF0YS5wcm9qIDwtIFNwYXRpYWxQb2ludHNEYXRhRnJhbWUoeHksZGF0YSwgcHJvajRzdHJpbmcgPSBDUlMuU0MpCiMgICB4eSA8LSBTcGF0aWFsUG9pbnRzKGRhdGEucHJvakBjb29yZHMpCiMgICBtY3Aub3V0IDwtIG1jcCh4eSwgcGVyY2VudGFnZSwgdW5vdXQ9ImhhIikKIyAgIGFyZWEgPC0gYXMuZGF0YS5mcmFtZShyb3VuZChtY3Aub3V0QGRhdGEkYXJlYSw0KSkKIyAgIC5yb3dOYW1lc0RGKGFyZWEsIG1ha2UubmFtZXM9VFJVRSkgPC0gZGF0YSRZRUFSCiMgICB3cml0ZS50YWJsZShhcmVhLGZpbGU9Ik1DUF9IZWN0YXJlcy5jc3YiLAojICAgICAgICAgICAgICAgYXBwZW5kPVRSVUUsc2VwPSIsIiwgY29sLm5hbWVzPUZBTFNFLCByb3cubmFtZXM9VFJVRSkKIyAgIG1jcC5wb2ludHMgPC0gY2JpbmQoKGRhdGEuZnJhbWUoeHkpKSxkYXRhJFlFQVIpCiMgICBjb2xuYW1lcyhtY3AucG9pbnRzKSA8LSBjKCJ4IiwieSIsICJ5ZWFyIikKIyAgIG1jcC5wb2x5IDwtIGZvcnRpZnkobWNwLm91dCwgcmVnaW9uID0gImlkIikKIyAgIHVuaXRzIDwtIGdyaWQudGV4dChwYXN0ZShyb3VuZChtY3Aub3V0QGRhdGEkYXJlYSwyKSwiIGhhIiksIHg9MC45LCAgeT0wLjk1LAojICAgICAgICAgICAgICAgICAgICAgIGdwPWdwYXIoZm9udGZhY2U9NCwgY2V4PTAuOSksIGRyYXcgPSBGQUxTRSkKIyAgIG1jcC5wbG90IDwtIGdncGxvdCgpICsKIyAgICAgZ2VvbV9wb2x5Z29uKGRhdGE9bWNwLnBvbHksIGFlcyh4PW1jcC5wb2x5JGxvbmcsIHk9bWNwLnBvbHkkbGF0KSwgYWxwaGE9MC41KSArCiMgICAgIGdlb21fcG9pbnQoZGF0YT1tY3AucG9pbnRzLCBhZXMoeD14LCB5PXkpKSArIHRoZW1lX2J3KCkgKwojICAgICBsYWJzKHg9IkVhc3RpbmcgKG0pIiwgeT0iTm9ydGhpbmcgKG0pIiwgdGl0bGU9bWNwLnBvaW50cyR5ZWFyKSArCiMgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIsIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgaGp1c3QgPSAwLjUpKSArCiMgICAgIGFubm90YXRpb25fY3VzdG9tKHVuaXRzKQojICAgbWNwLnBsb3QKIyB9CgpgYGAKCgoKCgpUYWJsZSAyIHwgR3JvdXAgMTAwJSBNQ1AgaG9tZSByYW5nZSBtZWFucyBvZiByYXcgZGF0YSBvZiBTdG9uZSBDYW55b24gYW5kIE93bCBIZWFkIEJ1dHRlcy4gR3JvdXBlZCBieSBlbnZpcm9ubWVudCBhbmQgc2V4LgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KbGlicmFyeShSbWlzYykKWVJfR1JQX01lYW5zIDwtIHN1bW1hcnlTRSh5ZWFyLCBtZWFzdXJldmFyPSJIb21lX1JhbmdlXzEwMG1jcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXB2YXJzPWMoIkVudmlyb25tZW50IiwiU2V4IiksbmEucm0gPSBUUlVFKQoKa2FibGUoWVJfR1JQX01lYW5zLCBmb3JtYXQgPSAicGFuZG9jIiwgCiAgICAgIGNhcHRpb24gPSAnR3JvdXAgTWVhbnMgb2YgT3ZlcmFsbCAxMDAlIE1DUCBIb21lIFJhbmdlcycpCmBgYAoKCgpUYWJsZSAzIHwgR3JvdXAgOTUlIE1DUCBob21lIHJhbmdlIG1lYW5zIG9mIHJhdyBkYXRhIG9mIFN0b25lIENhbnlvbiBhbmQgT3dsIEhlYWQgQnV0dGVzLiBHcm91cGVkIGJ5IGVudmlyb25tZW50IGFuZCBzZXguCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpZUl9HUlBfTWVhbnM5NSA8LSBzdW1tYXJ5U0UoeWVhciwgbWVhc3VyZXZhcj0iSG9tZV9SYW5nZV85NW1jcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHZhcnM9YygiRW52aXJvbm1lbnQiLCJTZXgiKSxuYS5ybSA9IFRSVUUpCgprYWJsZShZUl9HUlBfTWVhbnM5NSwgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnR3JvdXAgTWVhbnMgb2YgT3ZlcmFsbCA5NSUgTUNQIEhvbWUKICAgICAgUmFuZ2VzJykKYGBgCgoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwZF9STSA8LSBwb3NpdGlvbl9kb2RnZSgwLjEpCgpSYXcuWWVhckhSPC1nZ3Bsb3QoWVJfR1JQX01lYW5zLCBhZXMoeD1TZXgseT1Ib21lX1JhbmdlXzEwMG1jcCxncm91cD1FbnZpcm9ubWVudCkpKwogIGdlb21fcG9pbnQoYWVzKHNoYXBlID0gZmFjdG9yKEVudmlyb25tZW50KSksIHNpemUgPSAyLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC4xKSkrCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1Ib21lX1JhbmdlXzEwMG1jcC1zZSwgeW1heD1Ib21lX1JhbmdlXzEwMG1jcCtzZSksCiAgICAgICAgICAgICAgICB3aWR0aD0uMSxwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgpKSsKICAjIGdndGl0bGUoIk92ZXJhbGwgSG9tZSBSYW5nZXMgYnkgU2V4IGFuZCBQb3B1bGF0aW9uICgxMDAlIE1DUCkiKSsKICB4bGFiKCJTZXgiKSsKICB5bGFiKCJBcmVhIChoYSkiKSsKICAjIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGNvbG9yPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSkKICBsYWJzKGNhcHRpb24gPSAiRmlndXJlIDMgfCBSYXcgb3ZlcmFsbCBtZWFuIGhvbWUgcmFuZ2VzIGJldHdlZW4gZW52aXJvbm1lbnQgYW5kIHNleCB1c2luZyAxMDAlIE1DUHMuIE5vdGUsIHRoYXQgYmVmb3JlIGFkanVzdGVkIFxuIGhvbWUgcmFuZ2VzLCBtYWxlcyBleGhpYml0IHNtYWxsZXIgb3ZlcmFsbCBob21lIHJhbmdlcyBhdCBTdG9uZSBDYW55b24sIHRoYW4gbWFsZXMgb2YgT3dsIEhlYWQgQnV0dGVzLiIpKwogIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsbGluZWhlaWdodCA9IDAuOSkpCgp5ci5tZWFuLnJhdzwtUmF3LlllYXJIUiArIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmp1c3RpZmljYXRpb249YygwLDEpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQucG9zaXRpb249YygwLjA1LCAwLjk1KSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5rZXkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siKSkKeXIubWVhbi5yYXcKYGBgCgoKCgoKPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPkdpbGEgTW9uc3RlciBZZWFybHkgSG9tZSBSYW5nZSBTaGlmdHMgb2YgMTAwJSBNQ1BzLjwvc3Bhbj4KCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CkNSUy5TQzwtQ1JTKCIrcHJvaj11dG0gK3pvbmU9MTIgK2VsbHBzPVdHUzg0ICt1bml0cz1tICtub19kZWZzIikKCm1jcF9hbmFseXNpcy5QT0xZIDwtIGZ1bmN0aW9uKGZpbGVuYW1lLCBwZXJjZW50YWdlKXsKICBkYXRhIDwtIHJlYWQuY3N2KGZpbGUgPSBmaWxlbmFtZSxzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpCiAgZGF0YS5zcCA8LSBkYXRhWywgYygiTElaQVJETlVNQkVSIiwgIkVBU1RJTkciLCAiTk9SVEhJTkciKV0KICBjb29yZGluYXRlcyhkYXRhLnNwKSA8LSBjKCJFQVNUSU5HIiwgIk5PUlRISU5HIikKICBwcm9qNHN0cmluZyhkYXRhLnNwKSA8LSBDUlMuU0MKICBtY3Bfb3V0IDwtIG1jcChkYXRhLnNwLCBwZXJjZW50YWdlLCB1bm91dD0iaGEiKQp9CgpNMjE1X21jcC4xMTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTIxNS8yMDExIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0yMTVfbWNwLjEyPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMjE1LzIwMTIgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjEwNF9tY3AuMDg8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMDQvMjAwOCAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTA0X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEwNC8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMTRfbWNwLjA4PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0LzIwMDggLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTE0X21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMTRfbWNwLjExPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0LzIwMTEgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuMTI8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvMjAxMiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTM3X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEzNy8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMzdfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTM3LzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjEzN19tY3AuMTE8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMzcvMjAxMSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTQ3X21jcC4wOTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLjEwPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3LzIwMTAgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19tY3AuMTE8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvMjAxMSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTQ3X21jcC4xMjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny8yMDEyIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuMDg8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi8yMDA4IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuMTE8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi8yMDExIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuMTI8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YzNi8yMDEyIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuMDg8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni8yMDA4IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0Y2Ni8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTlfbWNwLjA4PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTE5LzIwMDggLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExOV9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTkvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTE5X21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExOS8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTJfbWNwLjA3PC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTEyLzIwMDcgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExMl9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTIvMjAwOSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpNMTEyX21jcC4xMDwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExMi8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk02OV9tY3AuMDk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL002OS8yMDA5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk02OV9tY3AuMTA8LW1jcF9hbmFseXNpcy5QT0xZKCIuL002OS8yMDEwIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgojIyBGb3J0aWZ5IG1jcCBwb2x5Z29ucyBmb3IgZ2dwbG90MiAqWUVBUio6CkYxMDRfbWNwLjA4VCA8LSBmb3J0aWZ5KEYxMDRfbWNwLjA4LCByZWdpb24gPSAiaWQiKQpGMTA0X21jcC4wOVQgPC0gZm9ydGlmeShGMTA0X21jcC4wOSwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuMDhUIDwtIGZvcnRpZnkoRjExNF9tY3AuMDgsIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLjA5VCA8LSBmb3J0aWZ5KEYxMTRfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpGMTE0X21jcC4xMFQgPC0gZm9ydGlmeShGMTE0X21jcC4xMCwgcmVnaW9uID0gImlkIikKRjExNF9tY3AuMTFUIDwtIGZvcnRpZnkoRjExNF9tY3AuMTEsIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLjEyVCA8LSBmb3J0aWZ5KEYxMTRfbWNwLjEyLCByZWdpb24gPSAiaWQiKQpGMTM3X21jcC4wOVQgPC0gZm9ydGlmeShGMTM3X21jcC4wOSwgcmVnaW9uID0gImlkIikKRjEzN19tY3AuMTBUIDwtIGZvcnRpZnkoRjEzN19tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCkYxMzdfbWNwLjExVCA8LSBmb3J0aWZ5KEYxMzdfbWNwLjExLCByZWdpb24gPSAiaWQiKQpGMTQ3X21jcC4wOVQgPC0gZm9ydGlmeShGMTQ3X21jcC4wOSwgcmVnaW9uID0gImlkIikKRjE0N19tY3AuMTBUIDwtIGZvcnRpZnkoRjE0N19tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLjExVCA8LSBmb3J0aWZ5KEYxNDdfbWNwLjExLCByZWdpb24gPSAiaWQiKQpGMTQ3X21jcC4xMlQgPC0gZm9ydGlmeShGMTQ3X21jcC4xMiwgcmVnaW9uID0gImlkIikKRjM2X21jcC4wOFQgPC0gZm9ydGlmeShGMzZfbWNwLjA4LCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLjA5VCA8LSBmb3J0aWZ5KEYzNl9tY3AuMDksIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuMTBUIDwtIGZvcnRpZnkoRjM2X21jcC4xMCwgcmVnaW9uID0gImlkIikKRjM2X21jcC4xMVQgPC0gZm9ydGlmeShGMzZfbWNwLjExLCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLjEyVCA8LSBmb3J0aWZ5KEYzNl9tY3AuMTIsIHJlZ2lvbiA9ICJpZCIpCkY2Nl9tY3AuMDhUIDwtIGZvcnRpZnkoRjY2X21jcC4wOCwgcmVnaW9uID0gImlkIikKRjY2X21jcC4wOVQgPC0gZm9ydGlmeShGNjZfbWNwLjA5LCByZWdpb24gPSAiaWQiKQpGNjZfbWNwLjEwVCA8LSBmb3J0aWZ5KEY2Nl9tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCk0xMTlfbWNwLjA4VCA8LSBmb3J0aWZ5KE0xMTlfbWNwLjA4LCByZWdpb24gPSAiaWQiKQpNMTE5X21jcC4wOVQgPC0gZm9ydGlmeShNMTE5X21jcC4wOSwgcmVnaW9uID0gImlkIikKTTExOV9tY3AuMTBUIDwtIGZvcnRpZnkoTTExOV9tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCk0xMTJfbWNwLjA3VCA8LSBmb3J0aWZ5KE0xMTJfbWNwLjA3LCByZWdpb24gPSAiaWQiKQpNMTEyX21jcC4wOVQgPC0gZm9ydGlmeShNMTEyX21jcC4wOSwgcmVnaW9uID0gImlkIikKTTExMl9tY3AuMTBUIDwtIGZvcnRpZnkoTTExMl9tY3AuMTAsIHJlZ2lvbiA9ICJpZCIpCk02OV9tY3AuMDlUIDwtIGZvcnRpZnkoTTY5X21jcC4wOSwgcmVnaW9uID0gImlkIikKTTY5X21jcC4xMFQgPC0gZm9ydGlmeShNNjlfbWNwLjEwLCByZWdpb24gPSAiaWQiKQpNMjE1X21jcC4xMVQgPC0gZm9ydGlmeShNMjE1X21jcC4xMSwgcmVnaW9uID0gImlkIikKTTIxNV9tY3AuMTJUIDwtIGZvcnRpZnkoTTIxNV9tY3AuMTIsIHJlZ2lvbiA9ICJpZCIpCgoKbWNwLnNoaWZ0LlRFU1Q0IDwtIGdncGxvdCgpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTA0X21jcC4wOFQsIGFlcyh4PUYxMDRfbWNwLjA4VCRsb25nLCB5PUYxMDRfbWNwLjA4VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMDRfbWNwLjA5VCwgYWVzKHg9RjEwNF9tY3AuMDlUJGxvbmcsIHk9RjEwNF9tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuMDhULCBhZXMoeD1GMTE0X21jcC4wOFQkbG9uZywgeT1GMTE0X21jcC4wOFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC4wOVQsIGFlcyh4PUYxMTRfbWNwLjA5VCRsb25nLCB5PUYxMTRfbWNwLjA5VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLjEwVCwgYWVzKHg9RjExNF9tY3AuMTBUJGxvbmcsIHk9RjExNF9tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjExNF9tY3AuMTFULCBhZXMoeD1GMTE0X21jcC4xMVQkbG9uZywgeT1GMTE0X21jcC4xMVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC4xMlQsIGFlcyh4PUYxMTRfbWNwLjEyVCRsb25nLCB5PUYxMTRfbWNwLjEyVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMzdfbWNwLjA5VCwgYWVzKHg9RjEzN19tY3AuMDlUJGxvbmcsIHk9RjEzN19tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuMTBULCBhZXMoeD1GMTM3X21jcC4xMFQkbG9uZywgeT1GMTM3X21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTM3X21jcC4xMVQsIGFlcyh4PUYxMzdfbWNwLjExVCRsb25nLCB5PUYxMzdfbWNwLjExVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjA5VCwgYWVzKHg9RjE0N19tY3AuMDlUJGxvbmcsIHk9RjE0N19tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjEwVCwgYWVzKHg9RjE0N19tY3AuMTBUJGxvbmcsIHk9RjE0N19tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjExVCwgYWVzKHg9RjE0N19tY3AuMTFUJGxvbmcsIHk9RjE0N19tY3AuMTFUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxNDdfbWNwLjEyVCwgYWVzKHg9RjE0N19tY3AuMTJUJGxvbmcsIHk9RjE0N19tY3AuMTJUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuMDhULCBhZXMoeD1GMzZfbWNwLjA4VCRsb25nLCB5PUYzNl9tY3AuMDhUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT02KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC4wOVQsIGFlcyh4PUYzNl9tY3AuMDlUJGxvbmcsIHk9RjM2X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTYpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMzZfbWNwLjEwVCwgYWVzKHg9RjM2X21jcC4xMFQkbG9uZywgeT1GMzZfbWNwLjEwVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NikgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuMTFULCBhZXMoeD1GMzZfbWNwLjExVCRsb25nLCB5PUYzNl9tY3AuMTFUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT02KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjM2X21jcC4xMlQsIGFlcyh4PUYzNl9tY3AuMTJUJGxvbmcsIHk9RjM2X21jcC4xMlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTYpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GNjZfbWNwLjA4VCwgYWVzKHg9RjY2X21jcC4wOFQkbG9uZywgeT1GNjZfbWNwLjA4VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MSkgKwogIGdlb21fcG9seWdvbihkYXRhPUY2Nl9tY3AuMDlULCBhZXMoeD1GNjZfbWNwLjA5VCRsb25nLCB5PUY2Nl9tY3AuMDlUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT0xKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC4xMFQsIGFlcyh4PUY2Nl9tY3AuMTBUJGxvbmcsIHk9RjY2X21jcC4xMFQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTEpICsKICBnZW9tX3BvbHlnb24oZGF0YT1NMTE5X21jcC4wOFQsIGFlcyh4PU0xMTlfbWNwLjA4VCRsb25nLCB5PU0xMTlfbWNwLjA4VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9TTExOV9tY3AuMDlULCBhZXMoeD1NMTE5X21jcC4wOVQkbG9uZywgeT1NMTE5X21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPU0xMTlfbWNwLjEwVCwgYWVzKHg9TTExOV9tY3AuMTBUJGxvbmcsIHk9TTExOV9tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1NMTEyX21jcC4wN1QsIGFlcyh4PU0xMTJfbWNwLjA3VCRsb25nLCB5PU0xMTJfbWNwLjA3VCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9TTExMl9tY3AuMDlULCBhZXMoeD1NMTEyX21jcC4wOVQkbG9uZywgeT1NMTEyX21jcC4wOVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPU0xMTJfbWNwLjEwVCwgYWVzKHg9TTExMl9tY3AuMTBUJGxvbmcsIHk9TTExMl9tY3AuMTBUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTMpICsKICAjIGdlb21fcG9seWdvbihkYXRhPU02OV9tY3AuMDlULCBhZXMoeD1NNjlfbWNwLjA5VCRsb25nLCB5PU02OV9tY3AuMDlUJGxhdCksCiAgIyAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siKSArCiAgIyBnZW9tX3BvbHlnb24oZGF0YT1NNjlfbWNwLjEwVCwgYWVzKHg9TTY5X21jcC4xMFQkbG9uZywgeT1NNjlfbWNwLjEwVCRsYXQpLAogICMgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIikgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9TTIxNV9tY3AuMTFULCBhZXMoeD1NMjE1X21jcC4xMVQkbG9uZywgeT1NMjE1X21jcC4xMVQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIpICsKICAjIGdlb21fcG9seWdvbihkYXRhPU0yMTVfbWNwLjEyVCwgYWVzKHg9TTIxNV9tY3AuMTJUJGxvbmcsIHk9TTIxNV9tY3AuMTJUJGxhdCksCiAgIyAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siKSArCiAgdGhlbWVfYncoKSArbGFicyh4PSJFYXN0aW5nIChtKSIsIHk9Ik5vcnRoaW5nIChtKSIpICsKICBsYWJzKGNhcHRpb24gPSAiRmlndXJlIDQgIHwgIFllYXJseSBob21lIHJhbmdlIHNoaWZ0cyBvZiBzdWItc2FtcGxlZCBob21lIHJhbmdlcyBvZiA4IGxpemFyZHMsIGJvdGggbWFsZXMgYW5kIGZlbWFsZXMuIEhvbWUgXG4gcmFuZ2Ugc2hpZnRzIGFwcGVhciB0byBiZSByZWxhdGl2bGV5IHN0YWJsZSBvdmVyIHN0dWR5IHllYXJzLiIpKwogIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsbGluZWhlaWdodCA9IDAuOSkpCiAgIyB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiLCBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGhqdXN0ID0gMC41KSkKCm1jcC5zaGlmdC5URVNUNApgYGAKCgoKCgo8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+UmVwZWF0ZWQgbWVhc3VyZXMgQU5PVkEgZm9yIFllYXJseSBIb21lIFJhbmdlcy48L3NwYW4+CgpSZXBlYXRlZCBNZWFzdXJlIEFOT1ZBIGZvciAxMDAlIE1DUCBvdmVyYWxsIGhvbWUgcmFuZ2VzCmBgYHtyIFJlcGVhdGVkIE1lYXN1cmVzIEFOT1ZBIFlFQVIsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIEdldCBwLXZhbHVlcyBmcm9tIG1peGVkIG1vZGVsIEYgdmFsdWVzOgpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkocmVhZHIpCnllYXIgPC0gcmVhZF9jc3YoIkdNX0NvbnNvbGlkYXRlZF9CeVllYXIuY3N2IikKClJNbW9kLnllYXI8LWxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+RW52aXJvbm1lbnQrWWVhcitTZXgrTjEwMCtFbnZpcm9ubWVudCpTZXgrCiAgICAgICAgICAgICAgICAgICAoMXxHaWxhKSxkYXRhID0geWVhcikKc3VtbWFyeShSTW1vZC55ZWFyKQpgYGAKCgpBTk9WQSBUYWJsZTogMTAwJSBNQ1AKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KYW5vdmEoUk1tb2QueWVhcikKYGBgCgoKUmVwZWF0ZWQgTWVhc3VyZSBBTk9WQSBmb3IgOTUlIE1DUCBvdmVyYWxsIGhvbWUgcmFuZ2VzCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpSTW1vZC55ZWFyOTU8LWxtZXIoSG9tZV9SYW5nZV85NW1jcH5FbnZpcm9ubWVudCtZZWFyK1NleCtOMTAwK0Vudmlyb25tZW50KlNleCsKICAgICAgICAgICAgICAgICAgICgxfEdpbGEpLGRhdGEgPSB5ZWFyKQpzdW1tYXJ5KFJNbW9kLnllYXI5NSkKYGBgCgoKQU5PVkEgVGFibGU6IDk1JSBNQ1AKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmFub3ZhKFJNbW9kLnllYXI5NSkKYGBgCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KUk1tb2QueWVhcjEwMDwtbG1lcihIb21lX1JhbmdlXzEwMG1jcH5FbnZpcm9ubWVudCtZZWFyK1NleCtOMTAwK0Vudmlyb25tZW50KlNleCsoMXxHaWxhKSxkYXRhID0geWVhcikKClJNLm1hcmdpbmFsIDwtIGxzbWVhbnMoUk1tb2QueWVhcjEwMCwgCiAgICAgICAgICAgICAgICAgICAgfiBFbnZpcm9ubWVudCkKIyBSTS5tYXJnaW5hbAoKIyMgQ0FUQUdPUklaRSBMU00gR1JBUEggQlkgU0VYIEJFVFdFRU4gRU5WSVJPTk1FTlQ6CnJlZlJNX3NleCA8LSBsc21lYW5zKFJNbW9kLnllYXIxMDAsIHNwZWNzID0gYygiRW52aXJvbm1lbnQiLCJTZXgiKSkKCiMgcmVmUk1fc2V4CnJlZl9kZlJNX3NleCA8LSBhcy5kYXRhLmZyYW1lKHN1bW1hcnkocmVmUk1fc2V4KSkKcGRfUk0gPC0gcG9zaXRpb25fZG9kZ2UoMC4xKQoKTFNNLlllYXJIUjwtZ2dwbG90KHJlZl9kZlJNX3NleCwgYWVzKHg9U2V4LHk9bHNtZWFuLGdyb3VwPUVudmlyb25tZW50KSkrCiAgZ2VvbV9wb2ludChhZXMoc2hhcGUgPSBmYWN0b3IoRW52aXJvbm1lbnQpKSwgc2l6ZSA9IDIscG9zaXRpb249cG9zaXRpb25fZG9kZ2UoLjEpKSsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPWxzbWVhbi1TRSwgeW1heD1sc21lYW4rU0UpLCB3aWR0aD0uMSxwb3NpdGlvbj1wb3NpdGlvbl9kb2RnZSgpKSsKICAjIGdndGl0bGUoIkFkanVzdGVkIEhvbWUgUmFuZ2VzIGJ5IFNleCBhbmQgUG9wdWxhdGlvbiAoMTAwJSBNQ1ApIikrCiAgeGxhYigiU2V4IikrCiAgeWxhYigiQXJlYSAoaGEpIikrCiAgbGFicyhjYXB0aW9uID0gIkZpZ3VyZSA1ICB8ICBBZGp1c3RlZCBob21lIHJhbmdlcyB1c2luZyAxMDAlIE1DUHMgYmV0d2VlbiBzZXhlcyBvZiBub24tc3Vic2lkaXplZCBhbmQgc3Vic2lkaXplZCBwb3B1bGF0aW9ucy4gXG4gQWRqdXN0ZWQgZm9yIGVudmlyb25tZW50LCB5ZWFyLCBzZXgsIGFuZCBzYW1wbGUgc2l6ZS4gTWFsZSBob21lIHJhbmdlcyByZW1haW5lZCBzbWFsbGVyIHRoYW4gdGhvc2Ugb2YgZmVtYWxlcyBhdCBcbiBPd2wgSGVhZCBCdXR0ZXMuIikrCiAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCxsaW5laGVpZ2h0ID0gMC45KSkKICAjIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGNvbG9yPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSkKCnlyLm1lYW4uYWRqPC1MU00uWWVhckhSICsgdGhlbWUobGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuanVzdGlmaWNhdGlvbj1jKDAsMSksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbj1jKDAuMDUsIDAuOTUpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmtleSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIpKQp5ci5tZWFuLmFkagpgYGAKCgoKCgpUYWJsZSA0LiBEaXJlY3Rpb25hbCBtZWFucyBvZiBob21lIHJhbmdlIGFmdGVyIGJlaW5nIGFkanVzdGVkIGZvciB5ZWFyLCBzZXggYW5kIHNhbXBsZSBzaXplLgpgYGB7ciBlY2hvPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0Ka2FibGUocmVmX2RmUk1fc2V4LCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdBZGp1c3RlZCBHcm91cCBNZWFucyBvZiBPdmVyYWxsIEhvbWUgICBSYW5nZXMnKQpgYGAKCiAKICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApQb3N0LUhvYyBjb21wYXJpc29ucyBiZXR3ZWVuIHNleGVzIGFuZCBlbnZpcm9ubWVudDoKYGBge3IgQ29tcHMgZm9yIFNleCwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9ClJNbW9kLnllYXIuRW08LWxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+RW52aXJvbm1lbnQrWWVhcitTZXgrTjEwMCtFbnZpcm9ubWVudCpTZXgrCiAgICAgICAgICAgICAgICAgICAgICAoMXxHaWxhKSxkYXRhID0geWVhcikKCiMgU2V4LmVtbS5vYSA8LSBlbW1lYW5zKFJNbW9kLnllYXIuRW0sIGMoIkVudmlyb25tZW50IiwiU2V4IikpCiMgcGFpcnMoU2V4LmVtbS5vYSkKCmVtbV9zLnQyIDwtIGVtbWVhbnMoUk1tb2QueWVhci5FbSwgcGFpcndpc2UgfiBTZXggfCBFbnZpcm9ubWVudCkKZW1tX3MudDIKYGBgCgoKCkdyYXBoaWNhbCBDb21wYXJpc29ucyBvZiBTZXggV2l0aGluIEVhY2ggRW52aXJvbm1lbnQ6CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpwbG90KGVtbV9zLnQyLCBjb21wYXJpc29ucyA9IFRSVUUsIHhsYWIgPSAiTWVhbiBIb21lIFJhbmdlIiwgeWxhYiA9ICJTZXgiKQpgYGAKRmlndXJlIDYgfCBQYWlyd2lzZSBjb21wYXJpc29ucyBvZiBob21lIHJhbmdlIGJldHdlZW4gc2V4ZXMgd2l0aGluIGVhY2ggZW52aXJvbm1lbnQuIElmIHJlZCBhcnJvd3Mgb3ZlcmxhcCB0aG9zZSBvZiBvdGhlcnMsIHRoZW4gIHRoZXJlIGlzIG5vIHNpZ25pZmljYW50IHN0YXRpc3RpY2FsIGRpZmZlcmVuY2UuIAoKCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmVtbV9zLnQzIDwtIGVtbWVhbnMoUk1tb2QueWVhci5FbSwgcGFpcndpc2UgfiBFbnZpcm9ubWVudCB8IFNleCkKZW1tX3MudDMKYGBgCgoKCkdyYXBoaWNhbCBDb21wYXJpc29ucyBvZiBTZXggYmV0d2VlbiB0aGUgdHdvIHBvcHVsYXRpb25zOgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KcGxvdChlbW1fcy50MywgY29tcGFyaXNvbnMgPSBUUlVFLCB4bGFiID0gIk1lYW4gSG9tZSBSYW5nZSIsIHlsYWIgPSAiU2V4IikKYGBgCkZpZ3VyZSA3IHwgUGFpd2lzZSBjb21wYXJpc29ucyBvZiBzZXggYmV0d2VlbiBlbnZpcm9ubWVudHMuIElmIHJlZCBhcnJvd3Mgb3ZlcmxhcCB0aG9zZSBvZiBvdGhlcnMsIHRoZW4gIHRoZXJlIGlzIG5vIHNpZ25pZmljYW50IHN0YXRpc3RpY2FsIGRpZmZlcmVuY2UuIAogCiAKIAogQXQgU3RvbmUgQ2FueW9uLCBtZWFuIG1hbGUgR2lsYSBNb25zdGVyIGhvbWUgcmFuZ2Ugd2FzIDExLjggwrEgMS42IFMuRS4gaGEgKDEwMCUgTUNQKSwgOS4wIMKxIDEuMSBTLkUuIEhhICg5NSUgTUNQKSwgd2l0aCBhIG1lYW4gZmVtYWxlIGhvbWUgcmFuZ2UgYXQgOS44IMKxIDEuMSBTLkUuIGhhICgxMDAlIE1DUCksIDcuMSDCsSAwLjcgUy5FLiBoYSAoOTUlIE1DUCkuIE1lYW4gaG9tZSByYW5nZXMgb2YgbWFsZSBhbmQgZmVtYWxlcyBhdCBPd2wgSGVhZCBCdXR0ZXMgd2VyZSA0My4yIMKxIFMuRS4gNS43IGhhICgxMDAlIE1DUCksIDQxLjkgwrEgNC45IFMuRS4gaGEgKDk1JSBNQ1ApLCBhbmQgMjIuMCDCsSAzLjcgUy5FLiBoYSAoMTAwJSBNQ1ApLCAyMC42IMKxIDIuNSBTLkUuIGhhICg5NSUgTUNQKSByZXNwZWN0aXZlbHkuIEluIHRoZSBwb29sZWQgZGF0YSBvZiBib3RoIHBvcHVsYXRpb25zLCB0aGVyZSB3YXMgbm8gZWZmZWN0IG9mIHllYXIgb24gdGhlIGFuYWx5c2VzIChGID0gMC40MSwgUCA9IDAuNTIpLCB3aGlsZSBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIHBvcHVsYXRpb25zIHdhcyBkZXRlY3RlZCAoRiA9IDguNjksIFAgPSAwLjAwNCksIGFuZCBhIHNpZ25pZmljYW5jZSBpbiBzZXggKEYgPSAxNi4zMywgUCA9IDAuMDAwNCkuIFVzaW5nIHRoZSA5NSUgTUNQcywgcmV2ZWFsZWQgc2ltaWxhciByZXN1bHRzLiBQb3N0LUhvYyBhbmFseXNlcyBiZXR3ZWVuIHNleGVzIGluZGljYXRlZCB0aGF0IHRoZXJlIHdhcyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgaW4gbWFsZSBob21lIHJhbmdlcyBiZXR3ZWVuIHRoZSB0d28gZW52aXJvbm1lbnRzIChkZiA9IDY4LjMsIFAgPSAwLjAwMDgpLiAgSG93ZXZlciwgdGhlIGRpZmZlcmVuY2UgaW4gZmVtYWxlIGhvbWUgcmFuZ2VzIGJldHdlZW4gdGhlIHR3byBlbnZpcm9ubWVudHMgd2FzIG5vdCBzaWduaWZpY2FudCAoZGYgPSA2OC4zLCBQID0gMC4wNikuIEF0IHN0b25lIGNhbnlvbiB0aGVyZSB3YXMgbm8gc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuIG1hbGUgYW5kIGZlbWFsZSBob21lIHJhbmdlcyAoZGYgPSAzNi40LCBQID0gMC4yMCkgd2l0aCBtYWxlIGhvbWUgcmFuZ2VzIGJlaW5nIG9ubHkgMyUgbGFyZ2VyIHRoYW4gZmVtYWxlcywgd2hpbGUgbWFsZXMgYXQgT3dsIEhlYWQgQnV0dGVzIGhhZCBzaWduaWZpY2FudGx5IGxhcmdlciBob21lIHJhbmdlcyB0aGFuIGRpZCBmZW1hbGVzIChkZiA9IDMxLjYsIFAgPSAwLjAwMDMpIHdpdGggbWFsZXMgaGF2aW5nIDY1JSBsYXJnZXIgaG9tZSByYW5nZXMgdGhhbiBmZW1hbGVzLiBJbnRlcmVzdGluZ2x5LCBtYWxlcyBhdCBTdG9uZSBDYW55b24gaGFkIHNtYWxsZXIgaG9tZSByYW5nZXMgdGhhbiBkaWQgdGhlIGZlbWFsZXMgYXQgT3dsIEhlYWQgQnV0dGVzIChUYWJsZXMgMi0zKSwgc3VnZ2VzdGluZyB0aGF0IEdpbGEgTW9uc3RlciBob21lIHJhbmdlcyBpbiBhIHJlc291cmNlIHN1YnNpZGl6ZWQgcG9wdWxhdGlvbiBpcyBncmVhdGx5IGluZmx1ZW5jZWQgYnkgZW52aXJvbm1lbnRhbCBmYWN0b3JzIG9mIGJvdGggcG9wdWxhdGlvbnMuICBXaGVuIHVzaW5nIDk1JSBNQ1BzLCBtYWxlIGhvbWUgcmFuZ2luZyByZWR1Y2VkIGJ5IDI1JSBhbmQgZmVtYWxlIHJhbmdlIGJ5IDMxJS4gQXQgT3dsIEhlYWQgQnV0dGVzLCBHaWxhIE1vbnN0ZXJzIHNob3dlZCBhIHNpbWlsYXIgYmVoYXZpb3Igd2l0aCBtYWxlIGhvbWUgcmFuZ2VzIHJlZHVjZWQgYnkgMjAlIGFuZCBmZW1hbGUgcmFuZ2VzIHJlZHVjZWQgYnkgMjYlIHVzaW5nIDk1JSBNQ1BzLiAKIAogCiAKIAogCgogCiAKIyMgT3ZlcmFsbCBZZWFybHkgSG9tZSBSYW5nZXMgKEtERSkKCgpIb21lIHJhbmdlIGVzdGltYXRpb24gb24gdGhlIFN0b25lIENhbnlvbiBkYXRhIHVzaW5nIDk1JSBLREVzIHdpdGggaHJlZiBiYW5kd2lkdGggcHJvZHVjZWQgYSBtYWxlIGhvbWUgcmFuZ2UgYXQgMzMuOSDCsSAzLjI3IFMuRS4gaGEsIGFuZCBhIGZlbWFsZSBob21lIHJhbmdlIGF0IDIzLjA2IMKxIDEuODYgUy5FLiBLREUgZXN0aW1hdGVzIGZvciBtYWxlIGFuZCBmZW1hbGUgaG9tZSByYW5nZXMgd2VyZSA5NiUgYW5kIDgwJSBsYXJnZXIgdGhhbiBNQ1AgZXN0aW1hdGVzLiBSZXBlYXRlZCBNZWFzdXJlcyBhbmFseXNpcyBvZiBLREVzIHN1Z2dlc3RlZCB0aGF0IHRoZXJlIHdhcyBhIHNtYWxsIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgYmV0d2VlbiBtYWxlIGFuZCBmZW1hbGUgaG9tZSByYW5nZXMgYXQgU3RvbmUgQ2FueW9uIAooRiA9IDQuNTIsIFAgPSAwLjA0KS4gCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQp5ZWFyLmtkZTwtcmVhZF9jc3YoJ3llYXJseSBrZGUgdGFibGUuY3N2JykKa2FibGUoeWVhci5rZGUsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1llYXJseSBLREUgSG9tZSBSYW5nZXMnKQpgYGAKCgoKVGFibGUgIHwgUmF3IEdyb3VwIDk1JSBLREUgaG9tZSByYW5nZSBtZWFucyBvZiBTdG9uZSBDYW55b24gYW5kIE93bCBIZWFkIEJ1dHRlcy4gR3JvdXBlZCBieSBlbnZpcm9ubWVudCBhbmQgc2V4LgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0Kc3ViIDwtIHN1YnNldCh5ZWFyLCBFbnZpcm9ubWVudCA9PSAic3Vic2lkaXplZCIpCgpZUl9HUlBfTWVhbnMuS0RFIDwtIHN1bW1hcnlTRShzdWIsIG1lYXN1cmV2YXI9IkhvbWVfUmFuZ2VfOTVrZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXB2YXJzPWMoIlNleCIpLG5hLnJtID0gVFJVRSkKCmthYmxlKFlSX0dSUF9NZWFucy5LREUsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1JhdyBHcm91cCBNZWFucyBvZiBPdmVyYWxsIDk1JSBLREUgSG9tZQogICAgICBSYW5nZXMnKQpgYGAKIAogCiAKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CgpSYXcuS0RFLkhSPC1nZ3Bsb3QoWVJfR1JQX01lYW5zLktERSwgYWVzKHg9U2V4LHk9SG9tZV9SYW5nZV85NWtkZSkpKwogIGdlb21fcG9pbnQoc2l6ZSA9IDIsIHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC4xKSkrCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1Ib21lX1JhbmdlXzk1a2RlLXNlLCB5bWF4PUhvbWVfUmFuZ2VfOTVrZGUrc2UpLAogICAgICAgICAgICAgICAgd2lkdGg9LjEscG9zaXRpb249cG9zaXRpb25fZG9kZ2UoKSkrCiAgIyBnZ3RpdGxlKCJPdmVyYWxsIEhvbWUgUmFuZ2VzIGJ5IFNleCBhbmQgUG9wdWxhdGlvbiAoMTAwJSBNQ1ApIikrCiAgeGxhYigiU2V4IikrCiAgeWxhYigiQXJlYSAoaGEpIikrCiAgIGxhYnMoY2FwdGlvbiA9ICJGaWd1cmUgOCAgfCAgUmF3IDk1JSBLREUgaG9tZSByYW5nZXMgYmV0d2VlbiBtYWxlIGFuZCBmZW1hbCBob21lIHJhbmdlcyBhdCBTdG9uZSBDYW55b24uIikrCiAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCxsaW5laGVpZ2h0ID0gMC45KSkKICAjIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGNvbG9yPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSkKClJhdy5LREUuSFI8LVJhdy5LREUuSFIgKyB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5qdXN0aWZpY2F0aW9uPWMoMCwxKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoMC4wNSwgMC45NSksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQua2V5ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIikpClJhdy5LREUuSFIKYGBgCkZpZ3VyZSAgIHwgUmF3IDk1JSBLREUgaG9tZSByYW5nZXMgYmV0d2VlbiBtYWxlIGFuZCBmZW1hbCBob21lIHJhbmdlcyBhdCBTdG9uZSBDYW55b24uIAogCiAKIAogCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5SZXBlYXRlZCBtZWFzdXJlcyBBTk9WQSBmb3IgS0RFIEhvbWUgUmFuZ2VzLjwvc3Bhbj4KClJlcGVhdGVkIE1lYXN1cmUgQU5PVkEgZm9yIDk1JSBLREUgb3ZlcmFsbCBob21lIHJhbmdlcwpgYGB7ciBSZXBlYXRlZCBNZWFzdXJlcyBBTk9WQSBLREUsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIEdldCBwLXZhbHVlcyBmcm9tIG1peGVkIG1vZGVsIEYgdmFsdWVzOgoKUk0uS0RFbW9kLnllYXI8LWxtZXIoSG9tZV9SYW5nZV85NWtkZX5ZZWFyK1NleCtOKygxfEdpbGEpLGRhdGEgPSBzdWIpCgpzdW1tYXJ5KFJNLktERW1vZC55ZWFyKQpgYGAKIApBTk9WQSBUYWJsZSBmb3IgOTUlIEtERSAoc3Vic2lkaXplZCkKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmFub3ZhKFJNLktERW1vZC55ZWFyKQpgYGAKCiAgCiAKIAogCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpSTS5LREVtb2QueWVhcjwtbG1lcihIb21lX1JhbmdlXzk1a2RlflllYXIrU2V4K04rKDF8R2lsYSksZGF0YSA9IHN1YikKCktERS5tYXJnaW5hbCA8LSBsc21lYW5zKFJNLktERW1vZC55ZWFyLCAKICAgICAgICAgICAgICAgICAgICB+IFNleCkKIyBSTS5tYXJnaW5hbAoKIyMgQ0FUQUdPUklaRSBMU00gR1JBUEggQlkgU0VYIEJFVFdFRU4gRU5WSVJPTk1FTlQ6CnJlZlJNX0tERSA8LSBsc21lYW5zKFJNLktERW1vZC55ZWFyLCBzcGVjcyA9IGMoIlNleCIpKQoKIyByZWZSTV9zZXgKcmVmX2RmUk1fS0RFIDwtIGFzLmRhdGEuZnJhbWUoc3VtbWFyeShyZWZSTV9LREUpKQpwZF9STSA8LSBwb3NpdGlvbl9kb2RnZSgwLjEpCgpMU00uS0RFLkhSPC1nZ3Bsb3QocmVmX2RmUk1fS0RFLCBhZXMoeD1TZXgseT1sc21lYW4pKSsKICBnZW9tX3BvaW50KHNpemUgPSAyLHBvc2l0aW9uPXBvc2l0aW9uX2RvZGdlKC4xKSkrCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbj1sc21lYW4tU0UsIHltYXg9bHNtZWFuK1NFKSwgd2lkdGg9LjEscG9zaXRpb249cG9zaXRpb25fZG9kZ2UoKSkrCiAgIyBnZ3RpdGxlKCJBZGp1c3RlZCBIb21lIFJhbmdlcyBieSBTZXggYW5kIFBvcHVsYXRpb24gKDEwMCUgTUNQKSIpKwogIHhsYWIoIlNleCIpKwogIHlsYWIoIkFyZWEgKGhhKSIpKwogIGxhYnMoY2FwdGlvbiA9ICJGaWd1cmUgOCAgfCAgQWRqdXN0ZWQgOTUlIEtERSBob21lIHJhbmdlcyBiZXR3ZWVuIG1hbGUgYW5kIGZlbWFsIGhvbWUgcmFuZ2VzIGF0IFN0b25lIENhbnlvbi4gQWRqdXN0ZWQgb24geWVhciwgXG4gc2V4LCBhbmQgc2FtcGxlIHNpemUuIikrCiAgdGhlbWUocGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCxsaW5laGVpZ2h0ID0gMC45KSkKICAjIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGNvbG9yPSJibGFjayIsIHNpemU9MTQsIGZhY2U9ImJvbGQiKSkKCkxTTS5LREUuSFI8LUxTTS5LREUuSFIgKyB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5qdXN0aWZpY2F0aW9uPWMoMCwxKSwKICAgICAgICAgICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uPWMoMC4wNSwgMC45NSksCiAgICAgICAgICAgICAgICAgICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQua2V5ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3VyID0gImJsYWNrIikpCkxTTS5LREUuSFIKYGBgCgogCiAKIApUYWJsZSAgfCBEaXJlY3Rpb25hbCBtZWFucyBvZiBLREUgaG9tZSByYW5nZXMgYWZ0ZXIgYmVpbmcgYWRqdXN0ZWQgZm9yIHllYXIsIHNleCBhbmQgc2FtcGxlIHNpemUuCmBgYHtyIGVjaG89RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQprYWJsZShyZWZfZGZSTV9LREUsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ0FkanVzdGVkIEtERSBHcm91cCBNZWFucyBvZiBPdmVyYWxsIEhvbWUgUmFuZ2VzJykKYGBgCiAKIAoKCgoKIAogCiAKIAojIFNlYXNvbmFsIEhvbWUgUmFuZ2UKIAo8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+U2Vhc29uYWwgSG9tZSBSYW5nZS48L3NwYW4+CgoKSG9tZSByYW5nZSBhbmFseXNpcyBicm9rZW4gZG93biBieSBmaXZlIHNlYXNvbnM7IEVtZXJnZW5jZSwgRHJ5LCBNb25zb29uLCBQb3N0IE1vbnNvb24uIFRoZSBzdGFydCBvZiBlbWVyZ2VuY2Ugd2FzIGRlZmluZWQgYnkgd2hlbiBtb3ZlbWVudCBwYXR0ZXJucyBpbmNyZWFzZWQgZnJvbSBub25lL21pbmltYWwgdG8gdGhlIHN0YXJ0IG9mIGhpZ2ggYWN0aXZpdHkuIEVmZm9ydCB3YXMgdGFrZW4gdG8gbWF0Y2ggYXMgY2xvc2VseSBhcyBwb3NzaWJsZSB0byB0aGUgT3dsIEhlYWQgQnV0dGVzIGVtZXJnZW5jZSBkYXRlIGludGVydmFsLiBNb25zb29uIHNlYXNvbiB3YXMgYWRqdXN0ZWQgdXNpbmcgTk9BQSBjbGltYXRlIGRhdGEuIFRoZSBzdGFydCBvZiB3YXMgZGVmaW5lZCB3aGVuIHRoZSBtZWFuIGRldyBwb2ludCB0ZW1wZXJhdHVyZXMgb2YgdGhyZWUgY29uc2VjdXRpdmUgZGF5cyB3ZXJlIGdyZWF0ZXIgdGhhbiA1NSBkZWdyZWVzLiAKClNjYWxpbmcgaG9tZSByYW5nZSBhbmFseXNlcyBieSBzZWFzb25hbCBlc3RpbWF0ZXMgcmVkdWNlcyB0aGUgbnVtYmVyIG9yIGxvY2F0aW9ucyBmb3IgZWFjaCBsaXphcmQuIDEwMCUgTUNQcyB3ZXJlIHVzZWQgZm9yIHNlYXNvbmFsIGhvbWUgcmFuZ2UgYW5hbHlzZXMgdG8gYXZvaWQgYW55IGZ1cnRoZXIgcmVkdWN0aW9uIG9mIGxvY2F0aW9ucyBmb3IgZWFjaCBlc3RpbWF0aW9uLgoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIyBDcmVhdGUgTUNQIHBvbHlnb25zIGJ5IFNFQVNPTjoKTTIxNV9tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL00yMTUvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0yMTVfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTIxNS9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTIxNV9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMjE1L01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCk0xMTJfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExMi9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExMl9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTEyL01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKTTExMl9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTIvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpNMTE5X21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL00xMTkvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTlfbWNwLk1PTjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vTTExOS9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCk0xMTlfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9NMTE5L1Bvc3RfTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKRjExNF9tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxMTRfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjExNC9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTE0L01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjExNF9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMTQvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpGMTM3X21jcC5FTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEzNy9FbWVyZ2VuY2UgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjEzN19tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTM3L0RyeSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTM3X21jcC5NT048LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxMzcvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTM3X21jcC5QTTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjEzNy9Qb3N0X01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKCkYxNDdfbWNwLkVNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3L0VtZXJnZW5jZSAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMTQ3X21jcC5EUlk8LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YxNDcvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLk1PTjwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjE0Ny9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYxNDdfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMTQ3L1Bvc3RfTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQoKRjI1Ml9tY3AuRU08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YyNTIvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYyNTJfbWNwLkRSWTwtbWNwX2FuYWx5c2lzLlBPTFkoIi4vRjI1Mi9EcnkgLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjI1Ml9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMjUyL01vbnNvb24gLmNzdiIsIHBlcmNlbnRhZ2U9IDEwMCkKRjI1Ml9tY3AuUE08LW1jcF9hbmFseXNpcy5QT0xZKCIuL0YyNTIvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpGMzZfbWNwLkVNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkYzNl9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGMzZfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GMzYvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgpGNjZfbWNwLkVNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvRW1lcmdlbmNlIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuRFJZPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvRHJ5IC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCkY2Nl9tY3AuTU9OPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvTW9uc29vbiAuY3N2IiwgcGVyY2VudGFnZT0gMTAwKQpGNjZfbWNwLlBNPC1tY3BfYW5hbHlzaXMuUE9MWSgiLi9GNjYvUG9zdF9Nb25zb29uIC5jc3YiLCBwZXJjZW50YWdlPSAxMDApCgojIyBGb3J0aWZ5IG1jcCBwb2x5Z29ucyBmb3IgZ2dwbG90MiAqU0VBU09OKjoKTTIxNV9tY3AuRU1UIDwtIGZvcnRpZnkoTTIxNV9tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCk0yMTVfbWNwLkRSWVQgPC0gZm9ydGlmeShNMjE1X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCk0yMTVfbWNwLk1PTlQgPC0gZm9ydGlmeShNMjE1X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCgpNMTEyX21jcC5EUllUIDwtIGZvcnRpZnkoTTExMl9tY3AuRFJZLCByZWdpb24gPSAiaWQiKQpNMTEyX21jcC5NT05UIDwtIGZvcnRpZnkoTTExMl9tY3AuTU9OLCByZWdpb24gPSAiaWQiKQpNMTEyX21jcC5QTVQgPC0gZm9ydGlmeShNMTEyX21jcC5QTSwgcmVnaW9uID0gImlkIikKCk0xMTlfbWNwLkRSWVQgPC0gZm9ydGlmeShNMTE5X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCk0xMTlfbWNwLk1PTlQgPC0gZm9ydGlmeShNMTE5X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCk0xMTlfbWNwLlBNVCA8LSBmb3J0aWZ5KE0xMTlfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjExNF9tY3AuRU1UIDwtIGZvcnRpZnkoRjExNF9tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLkRSWVQgPC0gZm9ydGlmeShGMTE0X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLk1PTlQgPC0gZm9ydGlmeShGMTE0X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkYxMTRfbWNwLlBNVCA8LSBmb3J0aWZ5KEYxMTRfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjEzN19tY3AuRU1UIDwtIGZvcnRpZnkoRjEzN19tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCkYxMzdfbWNwLkRSWVQgPC0gZm9ydGlmeShGMTM3X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCkYxMzdfbWNwLk1PTlQgPC0gZm9ydGlmeShGMTM3X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkYxMzdfbWNwLlBNVCA8LSBmb3J0aWZ5KEYxMzdfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjE0N19tY3AuRU1UIDwtIGZvcnRpZnkoRjE0N19tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLkRSWVQgPC0gZm9ydGlmeShGMTQ3X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLk1PTlQgPC0gZm9ydGlmeShGMTQ3X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkYxNDdfbWNwLlBNVCA8LSBmb3J0aWZ5KEYxNDdfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjI1Ml9tY3AuRU1UIDwtIGZvcnRpZnkoRjI1Ml9tY3AuRU0sIHJlZ2lvbiA9ICJpZCIpCkYyNTJfbWNwLkRSWVQgPC0gZm9ydGlmeShGMjUyX21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCkYyNTJfbWNwLk1PTlQgPC0gZm9ydGlmeShGMjUyX21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkYyNTJfbWNwLlBNVCA8LSBmb3J0aWZ5KEYyNTJfbWNwLlBNLCByZWdpb24gPSAiaWQiKQoKRjM2X21jcC5FTVQgPC0gZm9ydGlmeShGMzZfbWNwLkVNLCByZWdpb24gPSAiaWQiKQpGMzZfbWNwLkRSWVQgPC0gZm9ydGlmeShGMzZfbWNwLkRSWSwgcmVnaW9uID0gImlkIikKRjM2X21jcC5NT05UIDwtIGZvcnRpZnkoRjM2X21jcC5NT04sIHJlZ2lvbiA9ICJpZCIpCkYzNl9tY3AuUE1UIDwtIGZvcnRpZnkoRjM2X21jcC5QTSwgcmVnaW9uID0gImlkIikKCkY2Nl9tY3AuRU1UIDwtIGZvcnRpZnkoRjY2X21jcC5FTSwgcmVnaW9uID0gImlkIikKRjY2X21jcC5EUllUIDwtIGZvcnRpZnkoRjY2X21jcC5EUlksIHJlZ2lvbiA9ICJpZCIpCkY2Nl9tY3AuTU9OVCA8LSBmb3J0aWZ5KEY2Nl9tY3AuTU9OLCByZWdpb24gPSAiaWQiKQpGNjZfbWNwLlBNVCA8LSBmb3J0aWZ5KEY2Nl9tY3AuUE0sIHJlZ2lvbiA9ICJpZCIpCgptY3Auc2hpZnQuVEVTVDUgPC0gZ2dwbG90KCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLkVNVCwgYWVzKHg9RjExNF9tY3AuRU1UJGxvbmcsIHk9RjExNF9tY3AuRU1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC5EUllULCBhZXMoeD1GMTE0X21jcC5EUllUJGxvbmcsIHk9RjExNF9tY3AuRFJZVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJyZWQiLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTE0X21jcC5NT05ULCBhZXMoeD1GMTE0X21jcC5NT05UJGxvbmcsIHk9RjExNF9tY3AuTU9OVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJncmVlbiIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMTRfbWNwLlBNVCwgYWVzKHg9RjExNF9tY3AuUE1UJGxvbmcsIHk9RjExNF9tY3AuUE1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT01KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuRU1ULCBhZXMoeD1GMTM3X21jcC5FTVQkbG9uZywgeT1GMTM3X21jcC5FTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMzdfbWNwLkRSWVQsIGFlcyh4PUYxMzdfbWNwLkRSWVQkbG9uZywgeT1GMTM3X21jcC5EUllUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUYxMzdfbWNwLk1PTlQsIGFlcyh4PUYxMzdfbWNwLk1PTlQkbG9uZywgeT1GMTM3X21jcC5NT05UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImdyZWVuIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjEzN19tY3AuUE1ULCBhZXMoeD1GMTM3X21jcC5QTVQkbG9uZywgeT1GMTM3X21jcC5QTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTUpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTQ3X21jcC5FTVQsIGFlcyh4PUYxNDdfbWNwLkVNVCRsb25nLCB5PUYxNDdfbWNwLkVNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibHVlIixsaW5ldHlwZT0yKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjE0N19tY3AuRFJZVCwgYWVzKHg9RjE0N19tY3AuRFJZVCRsb25nLCB5PUYxNDdfbWNwLkRSWVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0icmVkIixsaW5ldHlwZT0zKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjE0N19tY3AuTU9OVCwgYWVzKHg9RjE0N19tY3AuTU9OVCRsb25nLCB5PUYxNDdfbWNwLk1PTlQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iZ3JlZW4iLGxpbmV0eXBlPTQpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMTQ3X21jcC5QTVQsIGFlcyh4PUYxNDdfbWNwLlBNVCRsb25nLCB5PUYxNDdfbWNwLlBNVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NSkgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9RjI1Ml9tY3AuRU1ULCBhZXMoeD1GMjUyX21jcC5FTVQkbG9uZywgeT1GMjUyX21jcC5FTVQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MikgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9RjI1Ml9tY3AuRFJZVCwgYWVzKHg9RjI1Ml9tY3AuRFJZVCRsb25nLCB5PUYyNTJfbWNwLkRSWVQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9MykgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9RjI1Ml9tY3AuTU9OVCwgYWVzKHg9RjI1Ml9tY3AuTU9OVCRsb25nLCB5PUYyNTJfbWNwLk1PTlQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NCkgKwogICMgZ2VvbV9wb2x5Z29uKGRhdGE9RjI1Ml9tY3AuUE1ULCBhZXMoeD1GMjUyX21jcC5QTVQkbG9uZywgeT1GMjUyX21jcC5QTVQkbGF0KSwKICAjICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJibGFjayIsbGluZXR5cGU9NSkgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuRU1ULCBhZXMoeD1GMzZfbWNwLkVNVCRsb25nLCB5PUYzNl9tY3AuRU1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsdWUiLGxpbmV0eXBlPTIpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMzZfbWNwLkRSWVQsIGFlcyh4PUYzNl9tY3AuRFJZVCRsb25nLCB5PUYzNl9tY3AuRFJZVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJyZWQiLGxpbmV0eXBlPTMpICsKICBnZW9tX3BvbHlnb24oZGF0YT1GMzZfbWNwLk1PTlQsIGFlcyh4PUYzNl9tY3AuTU9OVCRsb25nLCB5PUYzNl9tY3AuTU9OVCRsYXQpLAogICAgICAgICAgICAgICBhbHBoYT0wLjEsY29sb3VyPSJncmVlbiIsbGluZXR5cGU9NCkgKwogIGdlb21fcG9seWdvbihkYXRhPUYzNl9tY3AuUE1ULCBhZXMoeD1GMzZfbWNwLlBNVCRsb25nLCB5PUYzNl9tY3AuUE1UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImJsYWNrIixsaW5ldHlwZT01KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC5FTVQsIGFlcyh4PUY2Nl9tY3AuRU1UJGxvbmcsIHk9RjY2X21jcC5FTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmx1ZSIsbGluZXR5cGU9MikgKwogIGdlb21fcG9seWdvbihkYXRhPUY2Nl9tY3AuRFJZVCwgYWVzKHg9RjY2X21jcC5EUllUJGxvbmcsIHk9RjY2X21jcC5EUllUJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9InJlZCIsbGluZXR5cGU9MykgKwogIGdlb21fcG9seWdvbihkYXRhPUY2Nl9tY3AuTU9OVCwgYWVzKHg9RjY2X21jcC5NT05UJGxvbmcsIHk9RjY2X21jcC5NT05UJGxhdCksCiAgICAgICAgICAgICAgIGFscGhhPTAuMSxjb2xvdXI9ImdyZWVuIixsaW5ldHlwZT00KSArCiAgZ2VvbV9wb2x5Z29uKGRhdGE9RjY2X21jcC5QTVQsIGFlcyh4PUY2Nl9tY3AuUE1UJGxvbmcsIHk9RjY2X21jcC5QTVQkbGF0KSwKICAgICAgICAgICAgICAgYWxwaGE9MC4xLGNvbG91cj0iYmxhY2siLGxpbmV0eXBlPTUpICsKICB0aGVtZV9idygpICsKICBsYWJzKHg9IkVhc3RpbmcgKG0pIiwgeT0iTm9ydGhpbmcgKG0pIikgKwogIGxhYnMoY2FwdGlvbiA9ICJGaWd1cmUgIHwgIFNlYXNvbmFsIGhvbWUgcmFuZ2Ugc2hpZnRzIG9mIGZvdXIgbGl6YXJkcy4gRW1lcmdlbmNlIGFuZCBwb3N0LW1vbnNvb24gcmFuZ2VzIHN0YXkgcmVhbGF0aXZlbHkgd2l0aGluIFxuIGVhY2ggb3RoZXIuIEFsbCBzZWFzb25hbCBwb2x5Z29ucyBzdGF5IHJlbGF0aXZlbHkgc3RhYmxlIHdpdGhvdXQgYW55IG1ham9yIHNoaWZ0cyBhd2F5IGZyb20gb3RoZXIgc2Vhc29uYWwgcmFuZ2VzLiIpKwogIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAsbGluZWhlaWdodCA9IDAuOSkpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIsIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgaGp1c3QgPSAwLjUpKQoKbWNwLnNoaWZ0LlRFU1Q1CgpgYGAKCgoKCgoKCkFuYWx5c2lzIGluZGljYXRlZCB0aGF0IHRoZXJlIHdhcyBubyBlZmZlY3Qgb2Ygc2V4IG9uIHNlYXNvbmFsIGhvbWUgcmFuZ2VzIChkZiA9IDEsIEYgPSAyLjQyLCBQID0gMC4xMiksIGJ1dCB0aGVyZSB3YXMgYW4gZWZmZWN0IG9mIHNlYXNvbiAoZGYgPSAzLCBGID0gMTUuNDEsIFAgPSA8MC4wMDEpIGFuZCBhbiBpbnRlcmFjdGlvbiBvZiBlbnZpcm9ubWVudCBhbmQgc2Vhc29uIChkZiA9IDMsIEYgPSA2Ljg0LCBQID0gPDAuMDAxKS4gU2Vhc29uYWwgaG9tZSByYW5nZXMgYXQgU3RvbmUgQ2FueW9uIHZhcmllZCBpbiBzaXplIGJldHdlZW4gc2Vhc29ucyBidXQgZGlkIG5vdCBzZWVtIHNoaWZ0IChGaWcueCksIHdpdGggc2Vhc29uYWwgaG9tZSByYW5nZXMgb3ZlcmxhcHBpbmcgZWFjaCBvdGhlciwgb25seSBleHRlbmRpbmcgb3IgY29sbGFwc2luZyBiZXR3ZWVuIHNlYXNvbnMuIFBvc3QtSG9jIGFuYWx5c2VzIHdpdGggaG9tZSByYW5nZSBtZWFucyBhdmVyYWdlZCBhY3Jvc3Mgc2V4IG9mIHRoZSBTdG9uZSBDYW55b24gcG9wdWxhdGlvbiwgc3VnZ2VzdGVkIHRoYXQgdGhlcmUgd2FzIG5vIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgaW4gaG9tZSByYW5nZXMgYmV0d2VlbiB0aGUgZW1lcmdlbmNlICg0LjMyIMKxIDIuNTUgUy5FLiBoYSkgYW5kIHBvc3QtbW9uc29vbiBzZWFzb25zICg1LjA5IMKxIDIuMDcgUy5FLiBoYSkgbm9yIGRyeSBhbmQgbW9uc29vbiAoMTIuMjMgwrEgMS43NCBTLkUuIGhhIGFuZCA5LjA0IMKxIDEuNzggUy5FLiBoYSkuIFRoZXJlIHdhcyBhbHNvIG5vIHNpZ25pZmljYW5jZSBiZXR3ZWVuIGVtZXJnZW5jZSBhbmQgZHJ5L21vbnNvb24gc2Vhc29ucywgYnV0IHRoZXJlIHdhcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiBkcnkgYW5kIHBvc3QtbW9uc29vbiAoZGYgPSA4MC4yLCBQID0gMC4wNCkuIEdpbGEgbW9uc3RlcnMgYXQgb3VyIHN1YnNpZGl6ZWQgZW52aXJvbm1lbnQgc2VlbWVkIHRvIGhhdmUgaG9tZSByYW5nZXMgdGhhdCBzdGF5ZWQgcmF0aGVyIHNtYWxsIHdpdGhvdXQgbWFqb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBzZXhlcyB0aHJvdWdob3V0IHRoZSB5ZWFyIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgZHJ5IHNlYXNvbi4gRHVyaW5nIHRoZSBkcnkgc2Vhc29uIGlzIHdoZXJlIHdlIHNlZSBhIHNpZ25pZmljYW50IGluY3JlYXNlIGluIGhvbWUgcmFuZ2Ugc2l6ZXMgYmV0d2VlbiB0aGUgc2V4ZXMgKFRhYmxlIHgsIEZpZ3VyZSB4KS4gIFBvc3QtSG9jIGFuYWx5c2VzIG9uIHRoZSBPd2wgSGVhZCBCdXR0ZXMgcG9wdWxhdGlvbiBpbmRpY2F0ZWQgdGhhdCB0aGVyZSB3YXMgbm8gc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuIGVtZXJnZW5jZSAoMy4zMyDCsSAyLjI0IFMuRS4gaGEpIGFuZCBwb3N0LW1vbnNvb24gKDIuMzYgwrEgMi4zNiBTLkUuKSBub3IgZHJ5IGFuZCBtb25zb29uICgxOC44NiDCsSAyLjI1IFMuRS4gaGEgYW5kIDIxLjg1IMKxIDIuMDMgUy5FLiBoYSkgcmVmbGVjdGluZyB0aGF0IG9mIFN0b25lIENhbnlvbi4gSG93ZXZlciwgdGhlcmUgd2FzIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuIGVtZXJnZW5jZSBhbmQgZHJ5L21vbnNvb24gKGRmID0gNjkuNCwgUCA9IDwwLjAwMDEsIGFuZCBkZiA9IDY4LCBQID0gPDAuMDAwMSByZXNwZWN0aXZlbHkpLCBhcyB3ZWxsIGFzIHBvc3QtbW9uc29vbiBhbmQgZHJ5L21vbnNvb24gKGRmID0gNzguOSwgUCA9IDwwLjAwMDEsIGFuZCBkZiA9IDc0LCBQID0gPDAuMDAwMSkuIFRoaXMgc2hvd3MgYSByYXRoZXIgZGlmZmVyZW50IHBhdHRlcm4gdGhhbiBzZWVuIGF0IFN0b25lIENhbnlvbi4gR2lsYSBNb25zdGVyIGhvbWUgcmFuZ2VzIGF0IE93bCBIZWFkIHNlZW0gdG8gaGF2ZSBsYXJnZXIgaG9tZSByYW5nZSBwYXR0ZXJucyBkdXJpbmcgYm90aCB0aGUgZHJ5IGFuZCBtb25zb29uIHNlYXNvbnMsIHdpdGggdGhlIGxhcmdlc3QgaW5jcmVhc2UgaW4gaG9tZSByYW5nZSBhcmVhIHRha2luZyBwbGFjZSBkdXJpbmcgdGhlIG1vbnNvb24gc2Vhc29uIChUYWJsZSB4OyBGaWd1cmUgeCkuICBQYWlyd2lzZSBhbmFseXNlcyBiZXR3ZWVuIHRoZSB0d28gcG9wdWxhdGlvbnMgaW5kaWNhdGVkIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiBlbWVyZ2VuY2UgKGRmID0gODcuNywgUCA9IDAuNzYpIG9yIHBvc3QtbW9uc29vbiAoZGYgPSA4OS40LCBQID0gMC4zNSkuIERpZmZlcmVuY2VzIGluIGhvbWUgcmFuZ2Ugc2l6ZXMgYmV0d2VlbiB0aGUgdHdvIHBvcHVsYXRpb25zIHdlcmUgYmV0d2VlbiB0aGUgZHJ5IGFuZCBtb25zb29uIHNlYXNvbnMgKEZpZy54KS4gIE93bCBIZWFkIGhvbWUgcmFuZ2VzIHdlcmUgNTglIGxhcmdlciB0aGFuIHRob3NlIGF0IFN0b25lIENhbnlvbiBkdXJpbmcgdGhlIGRyeSBzZWFzb24sIGFuZCA3NiUgbGFyZ2VyIGR1cmluZyB0aGUgbW9uc29vbiBzZWFzb24uIAoKCgoKVGFibGUgNSB8IEdyb3VwIG1lYW5zIG9mIHNlYXNvbmFsIGhvbWUgcmFuZ2VzIGJldHdlZW4gU3RvbmUgQ2FueW9uIChzdWJzaWRpemVkKSBhbmQgT3dsIEhlYWQgQnV0dGVzIChub24tc3Vic2lkaXplZCkuIFRoZXNlIG1lYW5zIGFyZSBhdmVyYWdlZCBhY3Jvc3Mgc2V4LiAKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CnNlYXNvbmFsPC1yZWFkLmNzdigiU0NfU2Vhc29uYWxfRGF0YS5jc3YiKQoKbGlicmFyeShSbWlzYykKClNFQVNfR1JQX01lYW5zIDwtIHN1bW1hcnlTRShzZWFzb25hbCwgbWVhc3VyZXZhcj0iSG9tZV9SYW5nZV8xMDBtY3AiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXB2YXJzPWMoIkVudmlyb25tZW50IiwiU2Vhc29uIiksIG5hLnJtID0gVFJVRSkKCiMgU0VBU19HUlBfTWVhbnMKa2FibGUoU0VBU19HUlBfTWVhbnMsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1JhdyBHcm91cCBNZWFucyBvZiBTZWFzb25hbCBIb21lIFJhbmdlcycpCmBgYAoKCgoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KbGlicmFyeShsbWU0KQpsaWJyYXJ5KHJlYWRyKQpsaWJyYXJ5KGxtZXJUZXN0KQojIHNlYXNvbmFsPC1yZWFkLmNzdigiU0NfU2Vhc29uYWxfRGF0YS5jc3YiKQoKUk0ubW9kLlNlYXNvbiA8LSBsbWVyKEhvbWVfUmFuZ2VfMTAwbWNwfkVudmlyb25tZW50K1NlYXNvbitTZXgrTitFbnZpcm9ubWVudCpTZWFzb24rKDF8R2lsYSksIAogICAgICAgICAgICAgICAgICAgICAgZGF0YT1zZWFzb25hbCkKc3VtbWFyeShSTS5tb2QuU2Vhc29uKQoKIyBhbm92YShSTS5tb2QuU2Vhc29uKQoKIyAjIG1hcmdpbmFsLnNlYXNvbiA8LSBsc21lYW5zKFJNLm1vZC5TZWFzb24sIAojICMgICAgICAgICAgICAgICAgICAgIH4gRW52aXJvbm1lbnQpCiMgIyBtYXJnaW5hbC5zZWFzb24KYGBgCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KYW5vdmEoUk0ubW9kLlNlYXNvbikKYGBgCgoKCgoKCgpUYWJsZSA2IHwgU2Vhc29uYWwgaG9tZSByYW5nZSBtZWFucyBiZXR3ZWVuIFN0b25lIENhbnlvbiAoc3Vic2lkaXplZCkgYW5kIE93bCBIZWFkIEJ1dHRlcyAobm9uLXN1YnNpZGl6ZWQpIHBvcHVhdGlvbnMgZm9yIG1hbGVzIGFuZCBmZW1hbGVzLiBUaGVzZSBhcmUgcmF3IG1lYW5zIGJlZm9yZSBiZWluZyBhZGp1c3RlZCBmb3IgZW52aXJvbm1lbnQsIHNlYXNvbiwgc2V4LCBhbmQgc2FtcGxlIHNpemUuCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpTRUFTX0dSUF9URVNUIDwtIHN1bW1hcnlTRShzZWFzb25hbCwgbWVhc3VyZXZhcj0iSG9tZV9SYW5nZV8xMDBtY3AiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHZhcnM9YygiRW52aXJvbm1lbnQiLCJTZWFzb24iLCJTZXgiKSwgbmEucm0gPSBUUlVFKQoKIyBTRUFTX0dSUF9NZWFucwprYWJsZShTRUFTX0dSUF9URVNULCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdTZWFzb25hbCBNZWFucyBieSBTZXggQmV0d2VlbiBQb3B1bGF0aW9ucycpCmBgYAoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KCnBkIDwtIHBvc2l0aW9uX2RvZGdlKDAuMykgIyBtb3ZlIHRoZW0gLjA1IHRvIHRoZSBsZWZ0IGFuZCByaWdodCAoJ2RvZGdlcycpCgojIyBURVNUIDMKcmF3LnNlYXNvbmFsPC1nZ3Bsb3QoU0VBU19HUlBfVEVTVCxhZXMoeD1FbnZpcm9ubWVudCwgeT1Ib21lX1JhbmdlXzEwMG1jcCwgc2hhcGU9U2V4KSkgKyAKICBnZW9tX3BvaW50KGFlcyhzaGFwZT1TZXgpLCBzaXplID0gMiwgcG9zaXRpb249cGQpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPUhvbWVfUmFuZ2VfMTAwbWNwLXNlLCB5bWF4PUhvbWVfUmFuZ2VfMTAwbWNwK3NlKSwgcG9zaXRpb24gPSBwZCwKICAgICAgICAgICAgICAgIHdpZHRoPTAuMywgc2l6ZT0wLjUsIGx0eT0xKSArIAogICMgc2NhbGVfY29sb3VyX21hbnVhbCh2YWx1ZXMgPSBjKCdibGFjaycsJ3JlZCcpKSArCiAgZmFjZXRfZ3JpZCh+U2Vhc29uKSArCiAgIyBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYyg4LDE5KSkrCiAgbGFicyhjYXB0aW9uID0gIkZpZ3VyZSAgfCAgUmF3IHNlYXNvbmFsIG1lYW5zIG9mIHNleGVzIGJldHdlZW4gZWFjaCBlbnZpcm9ubWVudC4gSG9tZSByYW5nZXMgb2YgdGhlIHN1YnNpZGV6ZWQgcG9wdWxhdGlvbiByZW1haW4gXG4gcmVsYXRpdmVseSBzbWFsbCB0aHJvdWdob3V0IHRoZSBzZWFzb25zLCB3aXRoIHRoZSBleGNlcHRpb24gZHVyaW5nIHRoZSBkcnkgc2Vhc29uIHdoZXJlIHdlIG9ic2VydmUgaW5jcmVhc2VkIG1hbGUgXG4gaG9tZSByYW5nZXMuIFRoZSBub24tc3Vic2lkaXplZCBwb3B1bGF0aW9uIGV4aGliaXRzIGEgbGFyZ2UgYW1vdW50IG9mIHZhcmlhdGlvbiBhY3Jvc3Mgc2Vhc29ucy4iKSsKICB0aGVtZShwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLGxpbmVoZWlnaHQgPSAwLjkpKSsKICAjIHNjYWxlX3hfZGlzY3JldGUobGltaXRzPWMoJ0VtZXJnZW5jZScsJ0RyeScsJ01vbnNvb24nLCdQb3N0X01vbnNvb24nKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9IGMoLjg3LC44NSksIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGNvbG91ciA9ICJibGFjayIpLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQobGluZWhlaWdodD0xLjUsIGZhY2U9ImJvbGQiLCBzaXplPXJlbCgxLjUpLCBoanVzdCA9IDAuNSksCiAgICAgICAgYXhpcy50ZXh0LnggID0gZWxlbWVudF90ZXh0KHZqdXN0PTAuNSwgc2l6ZT04KSwKICAgICAgICBheGlzLnRleHQueSAgPSBlbGVtZW50X3RleHQodmp1c3Q9MC41LCBzaXplPTgpLAogICAgICAgIGF4aXMudGl0bGUueSAgPSBlbGVtZW50X3RleHQoc2l6ZT0xMCksCiAgICAgICAgYXhpcy50aXRsZS54ICA9IGVsZW1lbnRfdGV4dChzaXplPTEwKSwKICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLAogICAgICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0xMikpICsKICB4bGFiKCJFbnZpcm9ubWVudCIpICsgeWxhYigiQXJlYSAoaGEpIHVzaW5nIDEwMCUgTUNQIikKcmF3LnNlYXNvbmFsCmBgYAoKCgoKCkFkanVzdGVkIFNlYXNvbmFsIE1lYW5zCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpSTS5tb2QuU2Vhc29uIDwtIGxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+RW52aXJvbm1lbnQrU2Vhc29uK1NleCtOK0Vudmlyb25tZW50KlNlYXNvbisoMXxHaWxhKSwKICAgICAgICAgICAgICAgICAgICAgIGRhdGE9c2Vhc29uYWwpCgojIFJNLm1hcmdpbmFsIDwtIGxzbWVhbnMoUk0ubW9kLlNlYXNvbiwgCiMgICAgICAgICAgICAgICAgICAgICB+IEVudmlyb25tZW50KQojIFJNLm1hcmdpbmFsCgojIyBDQVRBR09SSVpFIExTTSBHUkFQSCBCWSBTRVggQkVUV0VFTiBFTlZJUk9OTUVOVDoKcmVmUk1fc2Vhc29uIDwtIGxzbWVhbnMoUk0ubW9kLlNlYXNvbiwgc3BlY3MgPSBjKCJFbnZpcm9ubWVudCIsIlNlYXNvbiIsIlNleCIpKQoKIyByZWZSTV9zZXgKcmVmX2RmUk1fc2Vhc29uIDwtIGFzLmRhdGEuZnJhbWUoc3VtbWFyeShyZWZSTV9zZWFzb24pKQpwZF9STSA8LSBwb3NpdGlvbl9kb2RnZSgwLjIpCgphZGouc2Vhc29uYWw8LWdncGxvdChyZWZfZGZSTV9zZWFzb24sYWVzKHg9RW52aXJvbm1lbnQsIHk9bHNtZWFuLCBzaGFwZT1TZXgpKSArIAogIGdlb21fcG9pbnQoYWVzKHNoYXBlPVNleCksIHNpemUgPSAyLCBwb3NpdGlvbj1wZCkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49bHNtZWFuLVNFLCB5bWF4PWxzbWVhbitTRSksIHBvc2l0aW9uID0gcGQsCiAgICAgICAgICAgICAgICB3aWR0aD0wLjMsIHNpemU9MC41LCBsdHk9MSkgKyAKICBmYWNldF9ncmlkKH5TZWFzb24pICsKICAgbGFicyhjYXB0aW9uID0gIkZpZ3VyZSAgfCBBZGp1c3RlZCBzZWFzb25hbCBob21lIHJhbmdlIG1lYW5zIG9mIHNleGVzIGJldHdlZW4gZW52aXJvbm1lbnRzLiBIb21lIHJhbmdlcyBvZiB0aGUgc3Vic2lkZXplZCBcbiBwb3B1bGF0aW9uIHJlbWFpbiByZWxhdGl2ZWx5IHNtYWxsIHRocm91Z2hvdXQgdGhlIHNlYXNvbnMuIEFmdGVyIGFkanVzdG1lbnQgbWFsZSBob21lIHJlYW5nZXMgd2VyZSByZWR1Y2VkLCBcbiBidXQgc3RpbGwgcmVtYWluZWQgc2xpZ2h0bHkgbGFyZ2VyIHRoZW4gZmVtYWxlcy4iKSsKICB0aGVtZShwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLGxpbmVoZWlnaHQgPSAwLjkpKSsKICAjIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDgsMTkpKSsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSBjKC44NywuODUpLCBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiYmxhY2siKSwKICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGxpbmVoZWlnaHQ9MS41LCBmYWNlPSJib2xkIiwgc2l6ZT1yZWwoMS41KSwgaGp1c3QgPSAwLjUpLAogICAgICAgIGF4aXMudGV4dC54ICA9IGVsZW1lbnRfdGV4dCh2anVzdD0wLjUsIHNpemU9OCksCiAgICAgICAgYXhpcy50ZXh0LnkgID0gZWxlbWVudF90ZXh0KHZqdXN0PTAuNSwgc2l6ZT04KSwKICAgICAgICBheGlzLnRpdGxlLnkgID0gZWxlbWVudF90ZXh0KHNpemU9MTApLAogICAgICAgIGF4aXMudGl0bGUueCAgPSBlbGVtZW50X3RleHQoc2l6ZT0xMCksCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwKICAgICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemU9MTIpKSArCiAgeGxhYigiRW52aXJvbm1lbnQiKSArIHlsYWIoIkFyZWEgKGhhKSB1c2luZyAxMDAlIE1DUCIpCmFkai5zZWFzb25hbApgYGAKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgClBvc3QtSG9jIGNvbXBhcmlzb25zIGJldHdlZW4gcG9wdWxhdGlvbnMgZm9yIHNlYXNvbmFsIGhvbWUgcmFuZ2UgYW5hbHlzaXM6CgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KZW1tX3MudCA8LSBlbW1lYW5zKFJNLm1vZC5TZWFzb24sIHBhaXJ3aXNlIH4gRW52aXJvbm1lbnQgfCBTZWFzb24pCmVtbV9zLnQKYGBgCgoKR3JhcGhpY2FsIENvbXBhcmlzb25zIG9mIHNlYXNvbnMgYmV0d2VlbiB0aGUgdHdvIHBvcHVsYXRpbnM6CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIHBsb3QoU2V4LmVtbS5zZWFzLCBjb21wYXJpc29ucyA9IFRSVUUpCnBsb3QoZW1tX3MudCwgY29tcGFyaXNvbnMgPSBUUlVFKQpgYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKRmlndXJlIDExIHwgUGFpcndpc2UgY29tcGFyaXNvbnMgb2YgZWFjaCBzZWFzb24gYmV0d2VlbiBlbnZpcm9ubWVudHMuIE92ZXJsYXBwaW5nIHJlZCBiYXJzIGluZGljYXRlIG5vIHN0YXRpc3RpY2FsIGRpZmZlcmVuY2UuIAoKCgoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMgU2Vhcy5NZWFuc1Q8LWVtbWVhbnMoUk0ubW9kLlNlYXNvbiwgbGlzdChwYWlyd2lzZSB+IEVudmlyb25tZW50LCBwYWlyd2lzZSB+IFNlYXNvbikpCiMgU2Vhcy5NZWFuc1QKCmVtbV9zLnQ0IDwtIGVtbWVhbnMoUk0ubW9kLlNlYXNvbiwgcGFpcndpc2UgfiBTZWFzb24gfCBFbnZpcm9ubWVudCkKZW1tX3MudDQKYGBgCgoKR3JhcGhpY2FsIENvbXBhcmlzb25zIGJldHdlZW4gc2Vhc29ucyB3aXRoaW4gdGhlIHR3byBwb3B1bGF0aW9uczoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CnBsb3QoZW1tX3MudDQsIGNvbXBhcmlzb25zID0gVFJVRSkKYGBgCkZpZ3VyZSAxMiB8IFBhaXJ3aXNlIGNvbXBhcmlzb25zIGJldHdlZW4gc2Vhc29ucyB3aXRoaW4gZWFjaCBlbnZpcm9ubWVudCBhZ2FpbnN0IGVzdGltYXRlZCBtYXJnaW5hbCBtZWFucy4gT3ZlcmxhcHBpbmcgcmVkIGJhcnMgaW5kaWNhdGUgbm8gc3RhdGlzdGljYWwgZGlmZmVyZW5jZS4gCgoKCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpzdWIgPC0gc3Vic2V0KHNlYXNvbmFsLCBFbnZpcm9ubWVudCA9PSAic3Vic2lkaXplZCIpCgpSTS5tb2QuU3ViIDwtIGxtZXIoSG9tZV9SYW5nZV8xMDBtY3B+U2Vhc29uK1NleCtOK1NlYXNvbipTZXgrKDF8R2lsYSksIGRhdGE9c3ViKQoKZW1tX3MudDUgPC0gZW1tZWFucyhSTS5tb2QuU3ViLCBwYWlyd2lzZSB+IFNleCB8IFNlYXNvbikKZW1tX3MudDUgCmBgYAoKR3JhcGhpY2FsIENvbXBhcmlzb25zIGJldHdlZW4gc2V4IHdpdGhpbiB0aGUgc3Vic2lkaXplZCBwb3B1bGF0aW9uOgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KcGxvdChlbW1fcy50NSwgY29tcGFyaXNvbnMgPSBUUlVFKQpgYGAgICAKICAgCiAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKVGFibGUgNyB8IE1lYW4gaW5kaXZpZHVhbCBzZWFzb2FubCBob21lIHJhbmdlcyBwb29sZWQgZnJvbSB0aGUgZW50aXJlIHN0dWR5IHBlcmlvZC4gTWlzc2luZyB2YWx1ZXMgYXJlIGRlcGljdGVkIHdoZXJlIG5vIGxvY2F0aW9ucyBmb3IgdGhhdCBhbmltYWwgZHVyaW5nIHRoYXQgcGVyaW9kIHdlcmUgc3VjY2Vzc2Z1bGwuCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpTZWFzLkluZC5NZWFuczwtcmVhZC5jc3YoIlNlYXNvbmFsIEhSIFRhYmxlLmNzdiIpCmthYmxlKFNlYXMuSW5kLk1lYW5zLCBmb3JtYXQgPSAicGFuZG9jIiwgY2FwdGlvbiA9ICdTZWFzb25hbCBJbmRpdmlkdWFsIEhvbWUgUmFuZ2VzIChNQ1ApLicpCmBgYAoKCgoKCgoKIyMgU2Vhc29uYWwgSG9tZSBSYW5nZSAoS0RFKQoKClRhYmxlICB8IFJhdyBLREUgZ3JvdXAgbWVhbnMgb2Ygc2Vhc29uYWwgaG9tZSByYW5nZXMgYmV0d2VlbiBzZXhlcyBhdCBTdG9uZSBDYW55b24gKHN1YnNpZGl6ZWQpLgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0Kc2Vhc29uLmtkZTwtcmVhZC5jc3YoIlNDX1NlYXNvbmFsX0lucHV0LmNzdiIpCgpTRUFTX0tERV9TZXggPC0gc3VtbWFyeVNFKHNlYXNvbi5rZGUsIG1lYXN1cmV2YXI9IkhvbWVfUmFuZ2VfOTVrZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXB2YXJzPWMoIlNlYXNvbiIsIlNleCIpLCBuYS5ybSA9IFRSVUUpCgojIFNFQVNfR1JQX01lYW5zCmthYmxlKFNFQVNfS0RFX1NleCwgZm9ybWF0ID0gInBhbmRvYyIsIGNhcHRpb24gPSAnUmF3IEtERSBHcm91cCBNZWFucyBvZiBTZWFzb25hbCBIb21lIFJhbmdlcyBiZXR3ZWVuIHNleGVzJykKYGBgCgogCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpTRUFTX0tERV9NZWFucyA8LSBzdW1tYXJ5U0Uoc2Vhc29uLmtkZSwgbWVhc3VyZXZhcj0iSG9tZV9SYW5nZV85NWtkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHZhcnM9YygiU2Vhc29uIiksIG5hLnJtID0gVFJVRSkKCiMgU0VBU19HUlBfTWVhbnMKa2FibGUoU0VBU19LREVfTWVhbnMsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ1JhdyBLREUgR3JvdXAgTWVhbnMgb2YgU2Vhc29uYWwgSG9tZSBSYW5nZXMnKQpgYGAKIAogCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQojIHNlYXNvbmFsPC1yZWFkLmNzdigiU0NfU2Vhc29uYWxfRGF0YS5jc3YiKQoKUk0uS0RFLlNlYXNvbiA8LSBsbWVyKEhvbWVfUmFuZ2VfOTVrZGV+U2Vhc29uK1NleCtOK1NlYXNvbipTZXgrKDF8R2lsYSksIAogICAgICAgICAgICAgICAgICAgICAgZGF0YT1zZWFzb24ua2RlKQpzdW1tYXJ5KFJNLktERS5TZWFzb24pCmBgYAogCkFOT1ZBIFRhYmxlLiBTZWFzb25hbCBLREUKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CmFub3ZhKFJNLktERS5TZWFzb24pCmBgYAoKIAoKUmF3IFNlYXNvbmFsIEtERSBNZWFucwpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KZ2dwbG90KFNFQVNfS0RFX1NleCxhZXMoeD1TZXgsIHk9SG9tZV9SYW5nZV85NWtkZSkpICsgCiAgZ2VvbV9wb2ludChzaXplID0gMiwgcG9zaXRpb249cGQpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluPUhvbWVfUmFuZ2VfOTVrZGUtc2UsIHltYXg9SG9tZV9SYW5nZV85NWtkZStzZSksIHBvc2l0aW9uID0gcGQsCiAgICAgICAgICAgICAgICB3aWR0aD0wLjMsIHNpemU9MC41LCBsdHk9MSkgKyAKICBmYWNldF9ncmlkKH5TZWFzb24pICsKICB0aGVtZV9idygpICsKICB4bGFiKCJTZXgiKSArIHlsYWIoIkFyZWEgKGhhKSB1c2luZyA5NSUgS0RFIikKYGBgCgoKCgoKQWRqdXN0ZWQgU2Vhc29uYWwgS0RFIE1lYW5zCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpSTS5LREUuU2Vhc29uIDwtIGxtZXIoSG9tZV9SYW5nZV85NWtkZX5TZWFzb24rU2V4K04rU2Vhc29uKlNleCsoMXxHaWxhKSwgCiAgICAgICAgICAgICAgICAgICAgICBkYXRhPXNlYXNvbi5rZGUpCgojIFJNLm1hcmdpbmFsIDwtIGxzbWVhbnMoUk0ubW9kLlNlYXNvbiwgCiMgICAgICAgICAgICAgICAgICAgICB+IEVudmlyb25tZW50KQojIFJNLm1hcmdpbmFsCgojIyBDQVRBR09SSVpFIExTTSBHUkFQSCBCWSBTRVggQkVUV0VFTiBFTlZJUk9OTUVOVDoKcmVmUk1fS0RFIDwtIGxzbWVhbnMoUk0uS0RFLlNlYXNvbiwgc3BlY3MgPSBjKCJTZWFzb24iLCJTZXgiKSkKCiMgcmVmUk1fc2V4CnJlZl9kZlJNX0tERSA8LSBhcy5kYXRhLmZyYW1lKHN1bW1hcnkocmVmUk1fS0RFKSkKcGRfUk0gPC0gcG9zaXRpb25fZG9kZ2UoMC4yKQoKZ2dwbG90KHJlZl9kZlJNX0tERSxhZXMoeD1TZXgsIHk9bHNtZWFuKSkgKyAKICBnZW9tX3BvaW50KHNpemUgPSAyLCBwb3NpdGlvbj1wZCkgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW49bHNtZWFuLVNFLCB5bWF4PWxzbWVhbitTRSksIHBvc2l0aW9uID0gcGQsCiAgICAgICAgICAgICAgICB3aWR0aD0wLjMsIHNpemU9MC41LCBsdHk9MSkgKyAKICBmYWNldF9ncmlkKH5TZWFzb24pICsKICB4bGFiKCJTZXgiKSArIHlsYWIoIkFyZWEgKGhhKSB1c2luZyA5NSUgS0RFIikKYGBgCgogCgoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KZW1tX3NleF9LREUgPC0gZW1tZWFucyhSTS5LREUuU2Vhc29uLCBwYWlyd2lzZSB+IFNleCB8IFNlYXNvbikKZW1tX3NleF9LREUgCmBgYAoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CnBsb3QoZW1tX3NleF9LREUsIGNvbXBhcmlzb25zPVRSVUUpCmBgYAoKCgoKCgojIEhvbWUgUmFuZ2UgT3ZlcmxhcCAoTUNQKQoKCjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj5HaWxhIE1vbnN0ZXIgSG9tZSBSYW5nZSBPdmVybGFwIG9mIDEwMCUgTUNQcy48L3NwYW4+CgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KCm1jcF9hbmFseXNpcy5QT0xZIDwtIGZ1bmN0aW9uKGZpbGVuYW1lLCBwZXJjZW50YWdlKXsKICBkYXRhIDwtIHJlYWQuY3N2KGZpbGUgPSBmaWxlbmFtZSxzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpCiAgZGF0YS5zcCA8LSBkYXRhWywgYygiTElaQVJETlVNQkVSIiwgIkVBU1RJTkciLCAiTk9SVEhJTkciKV0KICBjb29yZGluYXRlcyhkYXRhLnNwKSA8LSBjKCJFQVNUSU5HIiwgIk5PUlRISU5HIikKICBwcm9qNHN0cmluZyhkYXRhLnNwKSA8LSBDUlMuU0MKICBtY3Bfb3V0IDwtIG1jcChkYXRhLnNwLCBwZXJjZW50YWdlLCB1bm91dD0iaGEiKQp9CgpNNjdfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9NNjcvTTY3IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCk02OV9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL002OS9NNjkgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKTTI1NV9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL00yNTUvTTI1NSAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpNMjE1X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vTTIxNS9NMjE1IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCk0xNF9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL00xNC9NMTQgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKTTExOV9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL00xMTkvTTExOSAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpNMTEyX01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vTTExMi9NMTEyIC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCgpGNjZfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GNjYvRjY2IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYzNl9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YzNi9GMzYgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjI1Ml9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YyNTIvRjI1MiAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMjE0X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjIxNC9GMjE0IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYyMDBfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMjAwL0YyMDAgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjE0N19NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YxNDcvRjE0NyAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMTQ2X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjE0Ni9GMTQ2IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYxMzdfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMTM3L0YxMzcgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKRjEzNV9NQ1A8LW1jcF9hbmFseXNpcy5QT0xZKCcuL0YxMzUvRjEzNSAuY3N2JywgcGVyY2VudGFnZT0gMTAwKQpGMTE0X01DUDwtbWNwX2FuYWx5c2lzLlBPTFkoJy4vRjExNC9GMTE0IC5jc3YnLCBwZXJjZW50YWdlPSAxMDApCkYxMDRfTUNQPC1tY3BfYW5hbHlzaXMuUE9MWSgnLi9GMTA0L0YxMDQgLmNzdicsIHBlcmNlbnRhZ2U9IDEwMCkKCk1hbGUuTUNQIDwtIHJiaW5kKE02N19NQ1AsTTY5X01DUCxNMjU1X01DUCxNMjE1X01DUCxNMTRfTUNQLE0xMTlfTUNQLE0xMTJfTUNQKQpGZW1hbGUuTUNQIDwtIHJiaW5kKEY2Nl9NQ1AsRjM2X01DUCxGMjUyX01DUCxGMjE0X01DUCxGMjAwX01DUCxGMTQ3X01DUCxGMTQ2X01DUCxGMTM3X01DUCwKICAgICAgICAgICAgICAgICAgICBGMTM1X01DUCxGMTE0X01DUCxGMTA0X01DUCkKCm1hcHZpZXdPcHRpb25zKGJhc2VtYXBzID0gYygiT3BlblN0cmVldE1hcCIsIkVzcmkuV29ybGRJbWFnZXJ5IiwiT3BlblRvcG9NYXAiKSwKICAgICAgICAgICAgICAgbmEuY29sb3IgPSAibWFnZW50YSIsCiAgICAgICAgICAgICAgIGxheWVycy5jb250cm9sLnBvcyA9ICJ0b3BsZWZ0IikKCm1hcHZpZXcoTWFsZS5NQ1AsIGxlZ2VuZD1GLCB6Y29sPSJpZCIsIGNvbC5yZWdpb25zID0gYygiYmx1ZSIpLCBhbHBoYS5yZWdpb25zPTAuMykgKyAKICBtYXB2aWV3KEZlbWFsZS5NQ1AsIGxlZ2VuZD1GLCB6Y29sID0gImlkIiwgY29sLnJlZ2lvbnMgPSBjKCJyZWQiKSwgYWxwaGEucmVnaW9ucz0wLjMpCmBgYApGaWd1cmUgMTMgfCBJbnRlcmFjdGl2ZSBtYXA6IEhvbWUgUmFuZ2Ugb3ZlcmxhcCBieSBzZXggb2YgMTAwJSBNQ1BzIGF0IFN0b25lIENhbnlvbi4gUmVkIHBvbHlnb25zIHJlcHJlc2VudCBmZW1hbGUgbGl6YXJkcywgYW5kIGJsdWUgcmVwcmVzZW50cyBtYWxlIGxpemFyZHMuIAoKCgoKClRoZSBTdG9uZSBDYW55b24gcG9wdWxhdGlvbiBzZWVtcyB0byBleGhpYml0IGdyZWF0ZXIgZmVtYWxlLWZlbWFsZSBvdmVybGFwIGFzIHdlbGwgYXMgY29uc2lkZXJhYmxlIG92ZXJsYXAgb2YgbWFsZS1mZW1hbGUgaG9tZSByYW5nZXMuIFRoZXJlIGFwcGVhcnMgdG8gYmUgbGltaXRlZCBtYWxlLW1hbGUgb3ZlcmxhcCwgd2l0aCBvY2N1cmFuY2UgaGFwcGVuaW5nIGluIG9ubHkgdHdvIG1hbGUtbWFsZSBob21lIHJhbmdlIHBvbHlnb25zLiBUaGlzIGZpbmRpbmcgaXMgaW4gY29udHJhc3QgdG8gdGhlIE93bCBIZWFkIGJ1dHRlcyBzdHVkeSB3aGljaCByZXZlYWxlZCB0aGF0IHRoZXJlIHdhcyBhIGxhcmdlIGRlZ3JlZSBvZiBvdmVybGFwIGFtb25nIG1hbGUtZmVtYWxlIGFuZCBtYWxlLW1hbGUgb3ZlcmxhcHMgKFRhYmxlIHgpLiBHaWxsYXJkbyBjb25jbHVkZWQgdGhhdCwgaW4gdGhlaXIgc3R1ZHksIHRoZSBoaWdoIGRlZ3JlZSBvZiBvdmVybGFwIGluIG1hbGVzLW1hbGVzIGludGVyYWN0aW9ucyBtYXkgYmUgZHVlIHRvIGhhdmluZyBsYXJnZXIgaG9tZSByYW5nZXMgZm9yIG1hdGUgc2VhcmNoaW5nIGFjdGl2aXRpZXMuIE1hbGVzIG1heSBoYXZlIGFuZCBpbmNyZWFzZWQgaG9tZSByYW5nZSBzaXplIHRvIG1heGltaXplIHRoZWlyIGFjY2VzcyB0byBtdWx0aXBsZSBmZW1hbGVzLiBTaGUgY29uY2x1ZGVkIHRoYXQgdGhlIGxhY2sgb2YgZmVtYWxlLWZlbWFsZSBvdmVybGFwIG1heSBiZSBkdWUgdG8gc21hbGxlciBob21lIHJhbmdlIHNpemVzLiAKCkF0IFN0b25lIENhbnlvbiwgbWFsZXMgaGF2ZSByZWR1Y2VkIGhvbWUgcmFuZ2Ugc2l6ZXMgKFRhYmxlIDY7IEZpZy4gNCkuIEhvd2V2ZXIsIG1hbGVzIHN0aWxsIHJldGFpbiBob21lIHJhbmdlIG92ZXJsYXAgd2l0aCBtdWx0aXBsZSBmZW1hbGVzIHdoaWxlIGhhdmluZyByZWR1Y2VkIGNvbnRhY3Qgd2l0aCBvdGhlciBtYWxlcy4gVGhpcyBtYXkgYmUgaW4gcmVzcG9uc2UgdG8gbnV0cmllbnQgc3Vic2lkaWVzIHRoYXQgcmVkdWNlIHRoZSBuZWVkIHRvIGhhdmUgZXhwYW5kZWQgaG9tZSByYW5nZSBzaXplcyBmb3IgZm9yYWdpbmcgYWN0aXZpdGllcyBmb3IgYm90aCBtYWxlcyBhbmQgZmVtYWxlcy4gVGhlcmUgbWF5IGFsc28gYmUgYSBoaWdoZXIgZGVuc2l0eSBvZiBmZW1hbGVzIGFzIGEgcmVzcG9uc2UgdG8gcmVzb3VyY2UgYXZhaWxhYmlsaXR5IGFuZCByZWR1Y2VkIHJhbmdlIHJlcXVpcmVtZW50cy4gTWFsZXMgYXJlIG5vdCBmb3JjZWQgdG8gZXhwYW5kIGhvbWUgcmFuZ2VzIGZvciBtYXRlIHNlYXJjaGluZyB0byB0aGUgZXh0YW50IHRoYXQgaW5kaXZpZHVhbHMgYXQgT3dsIEhlYWQgQnV0dGVzIG1heSBiZSBzdWJqZWN0IHRvLiAKCgoKVGFibGUgOCB8IEhvbWUgcmFuZ2Ugb3ZlcmxhcCBvZiBHaWxhIE1vbnN0ZXJzIGF0IHRoZSBudXRyaWVudCBzdWJzaWRpemVkIHNpdGUuIE1hbGUtbWFsZSBvdmVybGFwcyBvbmx5IG9jY3VyZWQgYmV0d2VlbiB0d28gcGFpcnMgb2YgbWFsZXM6IE0xNC1NNjkgYW5kIE0xMTktTTIxNSBhdCAwLjUgaGEuIGFuZCAxOS41IGhhLiByZXNwZWN0aXZlbHkgYW5kIHdlcmUgdGhlcmVmb3JlIG5vdCBpbmNsdWRlZCBpbiB0aGUgdGFibGUuIApgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KT0xfVGFibGU8LXJlYWQuY3N2KCIuL092ZXJsYXAvT3ZlckxhcF9UYWJsZS5jc3YiKQoKa2FibGUoT0xfVGFibGUsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ0hvbWUgcmFuZ2Ugb3ZlcmxhcCBvZiBTdG9uZSBDYW55b24gR2lsYSBNb25zdGVycyB1c2luZyAxMDAlIE1DUHMuJykKYGBgCgoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpoci5vdmVybGFwPC1yZWFkLmNzdigiLi9PdmVybGFwL0hSX092ZXJsYXBfRGF0YS5jc3YiKQoKaHIub3ZlcmxhcC5hbmFsIDwtIHN1bW1hcnlTRShoci5vdmVybGFwLCBtZWFzdXJldmFyPSJPTCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cHZhcnM9YygiSW50ZXJhY3Rpb24iKSwgbmEucm0gPSBUUlVFKQoKIyBTRUFTX0dSUF9NZWFucwprYWJsZShoci5vdmVybGFwLmFuYWwsIGZvcm1hdCA9ICJwYW5kb2MiLCBjYXB0aW9uID0gJ0hvbWUgUmFuZ2UgT3ZlcmxhcCBTdW1tYXJ5JykKYGBgCgoKCgojIEhvbWUgUmFuZ2UgT3ZlcmxhcCAoS0RFKQoKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQoKa2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbiA8LSBmdW5jdGlvbihmaWxlbmFtZSwgcGVyY2VudGFnZSl7CiAgZGF0YSA8LSByZWFkLmNzdihmaWxlID0gZmlsZW5hbWUsc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQogIGRhdGEuc3AgPC0gZGF0YVssIGMoIkxJWkFSRE5VTUJFUiIsICJFQVNUSU5HIiwgIk5PUlRISU5HIildCiAgY29vcmRpbmF0ZXMoZGF0YS5zcCkgPC0gYygiRUFTVElORyIsICJOT1JUSElORyIpCiAgcHJvajRzdHJpbmcoZGF0YS5zcCkgPC0gQ1JTLlNDCiAga2RlPC1rZXJuZWxVRChkYXRhLnNwLCBoPSJocmVmIiwga2Vybj0iYml2bm9ybSIsIGdyaWQ9MTAwMCkKICB2ZXIgPC0gZ2V0dmVydGljZXNocihrZGUsIHBlcmNlbnRhZ2UpCiAgdmVyQHByb2o0c3RyaW5nPC1DUlMuU0MKICB2ZXIKfQoKTTY3X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9NNjcvTTY3IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTY5X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9NNjkvTTY5IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTI1NV9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTI1NS9NMjU1IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTIxNV9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTIxNS9NMjE1IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTE0X0tERTwta2RlX2FuYWx5c2lzLmhyZWYucG9seWdvbignLi9NMTQvTTE0IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTExOV9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTExOS9NMTE5IC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKTTExMl9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vTTExMi9NMTEyIC5jc3YnLCBwZXJjZW50YWdlPSA5NSkKCkY2Nl9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vRjY2L0Y2NiAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYzNl9LREU8LWtkZV9hbmFseXNpcy5ocmVmLnBvbHlnb24oJy4vRjM2L0YzNiAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYyNTJfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YyNTIvRjI1MiAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYyMTRfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YyMTQvRjIxNCAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYyMDBfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YyMDAvRjIwMCAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxNDdfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxNDcvRjE0NyAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxNDZfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxNDYvRjE0NiAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxMzdfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxMzcvRjEzNyAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxMzVfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxMzUvRjEzNSAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxMTRfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxMTQvRjExNCAuY3N2JywgcGVyY2VudGFnZT0gOTUpCkYxMDRfS0RFPC1rZGVfYW5hbHlzaXMuaHJlZi5wb2x5Z29uKCcuL0YxMDQvRjEwNCAuY3N2JywgcGVyY2VudGFnZT0gOTUpCgpNYWxlLktERSA8LSByYmluZChNNjdfS0RFLE02OV9LREUsTTI1NV9LREUsTTIxNV9LREUsTTE0X0tERSxNMTE5X0tERSxNMTEyX0tERSkKRmVtYWxlLktERSA8LSByYmluZChGNjZfS0RFLEYzNl9LREUsRjI1Ml9LREUsRjIxNF9LREUsRjIwMF9LREUsRjE0N19LREUsRjE0Nl9LREUsRjEzN19LREUsCiAgICAgICAgICAgICAgICAgICAgRjEzNV9LREUsRjExNF9LREUsRjEwNF9LREUpCgptYXB2aWV3T3B0aW9ucyhiYXNlbWFwcyA9IGMoIk9wZW5TdHJlZXRNYXAiLCJFc3JpLldvcmxkSW1hZ2VyeSIsIk9wZW5Ub3BvTWFwIiksCiAgICAgICAgICAgICAgIG5hLmNvbG9yID0gIm1hZ2VudGEiLAogICAgICAgICAgICAgICBsYXllcnMuY29udHJvbC5wb3MgPSAidG9wbGVmdCIpCgptYXB2aWV3KE1hbGUuS0RFLCBsZWdlbmQ9RiwgemNvbD0iaWQiLCBjb2wucmVnaW9ucyA9IGMoImJsdWUiKSwgYWxwaGEucmVnaW9ucz0wLjMpICsgCiAgbWFwdmlldyhGZW1hbGUuS0RFLCBsZWdlbmQ9RiwgemNvbCA9ICJpZCIsIGNvbC5yZWdpb25zID0gYygicmVkIiksIGFscGhhLnJlZ2lvbnM9MC4zKQpgYGAKRmlndXJlIDE0IHwgSW50ZXJhY3RpdmUgbWFwOiBIb21lIFJhbmdlIG92ZXJsYXAgYnkgc2V4IG9mIDk1JSBLREVzIGF0IFN0b25lIENhbnlvbi4gUmVkIHBvbHlnb25zIHJlcHJlc2VudCBmZW1hbGUgbGl6YXJkcywgYW5kIGJsdWUgcmVwcmVzZW50cyBtYWxlIGxpemFyZHMuIAoKCgoKCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1UUlVFfQoKa2RlX2FuYWx5c2lzLmhyZWYucmFzdGVyIDwtIGZ1bmN0aW9uKGZpbGVuYW1lKXsKICBkYXRhIDwtIHJlYWQuY3N2KGZpbGUgPSBmaWxlbmFtZSkKICB4IDwtIGFzLmRhdGEuZnJhbWUoZGF0YSRFQVNUSU5HKQogIHkgPC0gYXMuZGF0YS5mcmFtZShkYXRhJE5PUlRISU5HKQogIHh5IDwtIGMoeCx5KQogIGRhdGEucHJvaiA8LSBTcGF0aWFsUG9pbnRzRGF0YUZyYW1lKHh5LGRhdGEsIHByb2o0c3RyaW5nID0gQ1JTLlNDKQogIHh5IDwtIFNwYXRpYWxQb2ludHMoZGF0YS5wcm9qQGNvb3JkcykKICBrZGU8LWtlcm5lbFVEKHh5LCBoPSJocmVmIiwga2Vybj0iYml2bm9ybSIsIGdyaWQ9MTAwMCkKICBrZGVAcHJvajRzdHJpbmc8LSBDUlMuU0MKICBrZGUKfQoKTTExMi5yYXN0ZXIub3V0cHV0PC1rZGVfYW5hbHlzaXMuaHJlZi5yYXN0ZXIoIi4vTTExMi9NMTEyIC5jc3YiKQpGMTE0LnJhc3Rlci5vdXRwdXQ8LWtkZV9hbmFseXNpcy5ocmVmLnJhc3RlcigiLi9GMTE0L0YxMTQgLmNzdiIpCkYyMDAucmFzdGVyLm91dHB1dDwta2RlX2FuYWx5c2lzLmhyZWYucmFzdGVyKCIuL0YyMDAvRjIwMCAuY3N2IikKIyBwbG90KE0xMTIucmFzdGVyLm91dHB1dCkKIyBtYXB2aWV3KE0xMTIucmFzdGVyLm91dHB1dCwgYWxwaGEucmVnaW9ucz0wLjgpCgpNMTEyLnJhc3RlcjwtcmFzdGVyKE0xMTIucmFzdGVyLm91dHB1dCkKRjExNC5yYXN0ZXI8LXJhc3RlcihGMTE0LnJhc3Rlci5vdXRwdXQpCkYyMDAucmFzdGVyPC1yYXN0ZXIoRjIwMC5yYXN0ZXIub3V0cHV0KQoKCmxpYnJhcnkodG1hcCkKIyBjcmVhdGVzIGEgYm91bmRpbmcgYm94IGJhc2VkIG9uIHRoZSBleHRlbnRzIG9mIHRoZSBwb2x5Z29uCiNib3VuZGluZ19ib3ggPC0gYmIoT3V0cHV0LkFyZWFzKQpNMTEyLmJiIDwtIE0xMTJfS0RFQGJib3gKRjExNC5iYiA8LSBGMTE0X0tERUBiYm94CkYyMDAuYmIgPC0gRjIwMF9LREVAYmJveAoKCiMgbWFwcyB0aGUgcmFzdGVyIHdpdGhpbiB0aGUgYm91bmRpbmcgYm94CnRtX3NoYXBlKE0xMTIucmFzdGVyLCBiYm94ID0gTTExMi5iYikgKyB0bV9yYXN0ZXIoInVkIikKCiMgbWFzayB0aGUgcmFzdGVyIGJ5IHRoZSBvdXRwdXQgYXJlYSBwb2x5Z29uCk0xMTIubWFza2VkIDwtIG1hc2soTTExMi5yYXN0ZXIsIE0xMTJfS0RFKQojIE0xMTIubWFza2VkW2lzLm5hKE0xMTIubWFza2VkKV0gPC0gMApGMTE0Lm1hc2tlZCA8LSBtYXNrKEYxMTQucmFzdGVyLCBGMTE0X0tERSkKIyBGMTE0Lm1hc2tlZFtpcy5uYShGMTE0Lm1hc2tlZCldIDwtIDAKRjIwMC5tYXNrZWQgPC0gbWFzayhGMjAwLnJhc3RlciwgRjIwMF9LREUpCiMgRjIwMC5tYXNrZWRbaXMubmEoRjIwMC5tYXNrZWQpXSA8LSAwCgpwbG90KE0xMTIubWFza2VkKQojIG1hcHZpZXcoTTExMi5tYXNrZWQsIGFscGhhLnJlZ2lvbnM9MC42KQoKdG1fbGF5b3V0KG1haW4udGl0bGU9Ik0xMTIgRjExNCBhbmQgRjIwMCBLREUgT3ZlcmxhcCIpK3RtX3NoYXBlKE0xMTIubWFza2VkKSArCiAgdG1fcmFzdGVyKCJ1ZCIsIHN0eWxlID0gInF1YW50aWxlIiwgbiA9IDEwMCwgbGVnZW5kLnNob3cgPSBGQUxTRSwgcGFsZXR0ZSA9ICItWWxHbkJ1IikgKwogIHRtX3NoYXBlKEYxMTQubWFza2VkKSArIAogIHRtX3Jhc3RlcigidWQiLCBzdHlsZSA9ICJxdWFudGlsZSIsIG4gPSAxMDAsIGxlZ2VuZC5zaG93ID0gRkFMU0UsIHBhbGV0dGUgPSAiLVlsR25CdSIpICsKICB0bV9zaGFwZShGMjAwLm1hc2tlZCkgKwogIHRtX3Jhc3RlcigidWQiLCBzdHlsZSA9ICJxdWFudGlsZSIsIG4gPSAxMDAsIGxlZ2VuZC5zaG93ID0gRkFMU0UsIHBhbGV0dGUgPSAiLVlsR25CdSIpICsKICB0bV9zaGFwZShNMTEyX0tERSkgKyAKICB0bV9ib3JkZXJzKGFscGhhPS4zLCBjb2wgPSAiYmxhY2siKSArIAogIHRtX3NoYXBlKEYxMTRfS0RFKSArIAogIHRtX2JvcmRlcnMoYWxwaGE9LjMsIGNvbCA9ICJibGFjayIpICsgCiAgdG1fc2hhcGUoRjIwMF9LREUpICsgCiAgdG1fYm9yZGVycyhhbHBoYT0uMywgY29sID0gImJsYWNrIikKICB0bV9sYXlvdXQoZnJhbWUgPSBGQUxTRSkKICAKIyAsIGJib3ggPSBNMTEyLmJiCiMgY29tcHV0ZSBob21lcmFuZ2VzIGZvciA1MCUsIDk1JSBvZiBwb2ludHMsIG9iamVjdHMgYXJlIHJldHVybmVkIGFzIHNwYXRpYWwgcG9seWdvbiBkYXRhIGZyYW1lcwpNMTEyLnJhbmdlOTUgPC0gZ2V0dmVydGljZXNocihNMTEyLnJhc3Rlci5vdXRwdXQsIHBlcmNlbnQgPSA5NSkKTTExMi5yYW5nZTUwIDwtIGdldHZlcnRpY2VzaHIoTTExMi5yYXN0ZXIub3V0cHV0LCBwZXJjZW50ID0gNTApCkYxMTQucmFuZ2U5NSA8LSBnZXR2ZXJ0aWNlc2hyKEYxMTQucmFzdGVyLm91dHB1dCwgcGVyY2VudCA9IDk1KQpGMTE0LnJhbmdlNTAgPC0gZ2V0dmVydGljZXNocihGMTE0LnJhc3Rlci5vdXRwdXQsIHBlcmNlbnQgPSA1MCkKRjIwMC5yYW5nZTk1IDwtIGdldHZlcnRpY2VzaHIoRjIwMC5yYXN0ZXIub3V0cHV0LCBwZXJjZW50ID0gOTUpCkYyMDAucmFuZ2U1MCA8LSBnZXR2ZXJ0aWNlc2hyKEYyMDAucmFzdGVyLm91dHB1dCwgcGVyY2VudCA9IDUwKQoKdG1fbGF5b3V0KG1haW4udGl0bGU9Ik0xMTIgRjExNCBhbmQgRjIwMCBLREUgT3ZlcmxhcCIpKwp0bV9zaGFwZShNMTEyLnJhbmdlOTUpICsgCiAgdG1fYm9yZGVycyhhbHBoYT0uNywgY29sID0gIiNmYjZhNGEiLCBsd2QgPSAyKSArIHRtX2ZpbGwoYWxwaGE9LjEsIGNvbCA9ICIjZmI2YTRhIikgKwp0bV9zaGFwZShNMTEyLnJhbmdlNTApICsgdG1fYm9yZGVycyhhbHBoYT0uNywgY29sID0gIiNkZTJkMjYiLCBsd2QgPSAyKSArIHRtX2ZpbGwoYWxwaGE9LjEsIGNvbCA9ICIjZGUyZDI2IikgKwp0bV9sYXlvdXQoZnJhbWUgPSBGQUxTRSkgKwp0bV9zaGFwZShGMTE0LnJhbmdlOTUpICsgdG1fYm9yZGVycyhhbHBoYT0uNywgY29sID0gIiNmYjZhNGEiLCBsd2QgPSAyKSArIHRtX2ZpbGwoYWxwaGE9LjEsIGNvbCA9ICIjZmI2YTRhIikgKwp0bV9zaGFwZShGMTE0LnJhbmdlNTApICsgdG1fYm9yZGVycyhhbHBoYT0uNywgY29sID0gIiNkZTJkMjYiLCBsd2QgPSAyKSArIHRtX2ZpbGwoYWxwaGE9LjEsIGNvbCA9ICIjZGUyZDI2IikgKwp0bV9sYXlvdXQoZnJhbWUgPSBGQUxTRSkgKyAKdG1fc2hhcGUoRjIwMC5yYW5nZTk1KSArIHRtX2JvcmRlcnMoYWxwaGE9LjcsIGNvbCA9ICIjZmI2YTRhIiwgbHdkID0gMikgKyB0bV9maWxsKGFscGhhPS4xLCBjb2wgPSAiI2ZiNmE0YSIpICsKdG1fc2hhcGUoRjIwMC5yYW5nZTUwKSArIHRtX2JvcmRlcnMoYWxwaGE9LjcsIGNvbCA9ICIjZGUyZDI2IiwgbHdkID0gMikgKyB0bV9maWxsKGFscGhhPS4xLCBjb2wgPSAiI2RlMmQyNiIpICsKdG1fbGF5b3V0KGZyYW1lID0gRkFMU0UpCgojIyB3cml0ZSByYXN0ZXIgZmlsZXMgdG8gY29tcHV0ZXI6IAojIHdyaXRlUmFzdGVyKG1hc2tlZF9rZGUsIGZpbGVuYW1lID0gImtlcm5lbF9kZW5zaXR5LnRpZiIpCmBgYAoKCgoK